2017-04-11 3 views
0

Zum Beispiel, wenn ich dateframe verfolgt haben,Wie berechnet man den Zeitunterschied zwischen zwei verschiedenen Feldern aufeinanderfolgender Reihen in Pandas?

Task  Started_Time    Time_Duration (min) 
    A  23/05/2016 07:00   02:03:38 
    B  23/05/2016 09:45   08:03:38 
    A  23/05/2016 12:00   00:30:38 
    A  23/05/2016 15:30   01:03:38 
    A  23/05/2016 21:00   26:03:38 
    B  23/05/2016 18:00   30:03:38 

Wie Datum Zeit mit Zeitdelta hinzufügen, um die „Finished_Time“ zu finden?

Und wie gruppiert man die Datei nach Aufgaben (A, B, ...) und finde die "Freizeit" bevor die nächste Aufgabe startet?

(zum Beispiel, wenn die erste Aufgabe A um (7h + 02:03:38) 09:03:38 abgeschlossen ist. Wie die "Free_Time" vor der nächsten Aufgabe A um 12:00:00 zu finden ist.

Hier ist, wie ich diesen Datenrahmen erstellt

Task = ['A','B', 'A','A', 'A' ,'B'] 
Started Time = ['23/05/2016 07:00:00', '23/05/2016 09:45:00' ,'23/05/2016 12:00:00', '23/05/2016 15:30:00', '23/05/2016 21:00:00', '23/05/2016 18:00:00' ] 
Time Duration = ['02:03:38', '08:03:38','00:30:38','01:03:38','26:03:38','30:03:38'] 

wenn ich versuche, „begann Zeit‘ in Datetime zu konvertieren, diese mit.

df['Started_Time'] = df['Started_Time'].values.astype('datetime64[D]') 

bekomme ich folgende Fehlermeldung:

ValueError: Error parsing datetime string "23/05/2016 07:00" at position 2 

Wie Sie diesen Fehler beheben und mit "Time_Duration" hinzufügen. Ich konvertieren Zeitdauer Zeitdelta,

df['Time_Duration'] = pd.to_timedelta(df['Time_Duration'], unit = 'm') 
df['Finished_Time'] = df['Started_Time'] + df['Time_Duration'] 

Und die "FREE_TIME" zu finden, habe ich diesen Code,

df.sort_values(['Task'] 
i=1 
for index, row in df.iterrows(): 
if df.iloc[i,1] == df.iloc[i+1,1]: 
    df['Free_Time'] = df.iloc[i+1,2] + df.iloc[i,3] 
    i+1 
    print df['Free_Time'] 

Und bekomme ich folgende Fehlermeldung:

TypeError: unsupported operand type(s) for -: 'str' and 'str' 
+0

Bitte posten Ihr Code und sagen Sie uns, wo Sie stecken geblieben sind. Sie sollten auch http://stackoverflow.com/help/how-to-ask und http://stackoverflow.com/help/mcve besuchen –

Antwort

0

IIUC können Sie es auf diese Weise tun:

In [125]: df['Duration'] = df.groupby('Task')['StartedTime'].diff() 

In [126]: df 
Out[126]: 
    Task   StartedTime Duration 
0 A 2016-05-23 07:00:00  NaT 
1 B 2016-05-23 09:45:00  NaT 
2 A 2016-05-23 12:00:00 05:00:00 
3 A 2016-05-23 15:30:00 03:30:00 
4 A 2016-05-23 21:00:00 05:30:00 
5 B 2016-05-23 18:00:00 08:15:00 

In [127]: df.sort_values(['Task', 'StartedTime']) 
Out[127]: 
    Task   StartedTime Duration 
0 A 2016-05-23 07:00:00  NaT 
2 A 2016-05-23 12:00:00 05:00:00 
3 A 2016-05-23 15:30:00 03:30:00 
4 A 2016-05-23 21:00:00 05:30:00 
1 B 2016-05-23 09:45:00  NaT 
5 B 2016-05-23 18:00:00 08:15:00 
Verwandte Themen