如何计算pandas中连续行的两个不同字段之间的时间差?
How to calculate time difference between two different field of consecutive rows 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
如何添加带有时间增量的日期时间以找到 "Finished_Time"?
以及如何按任务(A、B、...)对文件进行分组并在下一个任务开始之前找到 "freetime"?
(例如,如果第一个任务 A 在 (7h + 02:03:38) 09:03:38 完成。如何在 [=45= 下一个任务 A 之前找到 "Free_Time" ]开始。
以下是我创建此数据框的方式。
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']
当我尝试将“开始时间”转换为日期时间时,使用这个:
df['Started_Time'] = df['Started_Time'].values.astype('datetime64[D]')
我收到以下错误:
ValueError: Error parsing datetime string "23/05/2016 07:00" at position 2
如何修复此错误并添加 "Time_Duration"。我将持续时间转换为时间增量,
df['Time_Duration'] = pd.to_timedelta(df['Time_Duration'], unit = 'm')
df['Finished_Time'] = df['Started_Time'] + df['Time_Duration']
而且,为了找到 "Free_Time" ,我使用了这段代码,
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']
而且,我收到以下错误:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
IIUC 你可以这样做:
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
例如,如果我有以下日期框架,
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
如何添加带有时间增量的日期时间以找到 "Finished_Time"?
以及如何按任务(A、B、...)对文件进行分组并在下一个任务开始之前找到 "freetime"?
(例如,如果第一个任务 A 在 (7h + 02:03:38) 09:03:38 完成。如何在 [=45= 下一个任务 A 之前找到 "Free_Time" ]开始。
以下是我创建此数据框的方式。
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']
当我尝试将“开始时间”转换为日期时间时,使用这个:
df['Started_Time'] = df['Started_Time'].values.astype('datetime64[D]')
我收到以下错误:
ValueError: Error parsing datetime string "23/05/2016 07:00" at position 2
如何修复此错误并添加 "Time_Duration"。我将持续时间转换为时间增量,
df['Time_Duration'] = pd.to_timedelta(df['Time_Duration'], unit = 'm')
df['Finished_Time'] = df['Started_Time'] + df['Time_Duration']
而且,为了找到 "Free_Time" ,我使用了这段代码,
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']
而且,我收到以下错误:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
IIUC 你可以这样做:
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