如何计算熊猫中连续行的两个不同字段之间的时间差



例如,如果我有以下日期框架,

  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,...(对文件进行分组,并在下一个任务开始之前找到"空闲时间"?

(例如,如果第一个任务 A 在 (7h + 02:03:38( 09:03:38 完成。如何在下一个任务 A 在 12:00:00 开始之前找到"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

最新更新