如何按特定列返回timedelta groupby

时间:2019-03-26 07:34:28

标签: python

我已经编写了一些代码来计算完成特定项目中每个里程碑所需的时间(通过从下一行的开始日期中减去前一个结束时间)。

jb_id mlstne_id  strt_tme             end_tme              err_tme   max
166   1511   2019-01-31 07:14:43  2019-01-31 08:36:07        NaT     NaN
166   1515   2019-01-31 08:36:07  2019-01-31 08:38:26        NaT     0.0
166   1518   2019-01-31 12:16:46   NaT           2019-01-31 13:18:40 218.0
166   1520   2019-01-31 13:21:27  2019-01-31 13:30:20        NaT     2.0
166   1524   2019-01-31 13:30:21  2019-01-31 13:34:49 2019-01-31 13:34:49  0.0
167   1530   2019-01-31 13:35:49  2019-01-31 13:36:49        NaT     1.0

Max start返回最大时间增量(从当前行的开始时间减去前一个结束时间,再从当前行的开始时间减去前一个err_time之间)。因此,在上面的示例中,由于167是新的jb_id,因此最长时间不应为一分钟,因此应为NaT,因为这是新工作的开始

testing = time.sort_values(['jb_id','mlstne_id'], ascending=[True,True])
testing['start1'] = (testing['strt_tme'] - testing['end_tme'].shift(1)).apply(lambda x: x.total_seconds()//60)
testing['start2'] = (testing['strt_tme'] - testing['err_tme'].shift(1)).apply(lambda x: x.total_seconds()//60)
testing['max'] = testing[['start1','start2']].max(axis=1)

我遇到的问题是,每个里程碑都与一个特定项目相关联,并且项目ID列表示该里程碑属于哪个项目。当我将代码应用于整个数据帧时,每个新项目的第一个mlstne_id返回的最大分钟数是前一个jb_id的上一个项目结束时间和新jb_id的开始时间(而不是返回NaN)的时间增量(因为这是一项新工作) )。

我怀疑解决方案可能涉及使用groupby,然后通过jb_id找到timedeltas groupby?

0 个答案:

没有答案