2017-09-15 57 views
0

由於下面的輸入df,我需要在日期發生變化時立即將時間設置爲「TimeLeft」列的00:00:00。例如,如何重置數據框中不同日期的時間

輸入DF:

TimeLeft    colum_B ProgPerc id_B  ts_B 
0 2017-04-27T00:01:12 B  97.0  id1  2017-04-27T01:36:48 
1 2017-04-27T00:00:12 B  98.0  id1  2017-04-27T01:37:48 
2 2017-04-26T23:58:24 B  99.0  id1  2017-04-27T01:38:48 
3 2017-04-26T23:57:45 B  100.0  id1  2017-04-27T01:39:36 

輸出DF:

TimeLeft    colum_B ProgPerc id_B  ts_B 
0 2017-04-27T00:01:12 B  97.0  id1  2017-04-27T01:36:48 
1 2017-04-27T00:00:12 B  98.0  id1  2017-04-27T01:37:48 
2 2017-04-26T00:00:00 B  99.0  id1  2017-04-27T01:38:48 
3 2017-04-26T00:00:00 B  100.0  id1  2017-04-27T01:39:36 

任何幫助DBE竟被非常理解的。預先感謝您的幫助。最好的問候,C

+0

爲什麼在前一天剩下的時間是0?這看起來像倒計時?我不認爲有足夠的信息來回答這個問題。時間和進度百分比似乎相反。 – roganjosh

+0

如果您正在尋找替換方法(https://docs.python.org/2/library/datetime.html#datetime.datetime.replace),我可以爲您寫點東西 –

+0

非常感謝Liam Healy。是的,這將是非常有利的。我試圖實現的方法是添加一個額外的列[「day」],然後當差值小於零時,將相應的時間設置爲00:00:00。 –

回答

0

問題解決。這裏是解決方案:

if __name__ == "__main__": 
    filepath="/home/SERILOCAL/c.allocca/Desktop/MantaData/test1/1490022000_1.csv" 
    df = pd.read_csv(filepath) #your input data saved here 

    df["ts_B_day"]=df["ts_B"].apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%dT%H:%M:%S").date().day)  
    df["TimeLeft_day"]=df["TimeLeft"].apply(lambda x: datetime.datetime.strptime(x, "%Y-%m-%dT%H:%M:%S").date().day)  

def replace_time(row): 
    date_=datetime.datetime.strptime(row['TimeLeft'], "%Y-%m-%dT%H:%M:%S").date() 
    end_time = datetime.datetime.combine(date_, datetime.time(00, 00,00)) 
    end_time = end_time.strftime('%Y-%m-%dT%H:%M:%S')  
    return end_time 

df['TimeLeft'] = df.apply(lambda row: replace_time(row) if row['ts_B_day'] != row['TimeLeft_day'] else (row['TimeLeft']), axis=1) 
print(df.to_string()) 
相關問題