我已经编写了一些代码来计算完成特定项目中每个里程碑所需的时间(从下一行的开始日期中减去上一个endtime)
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返回最大的时间增量(从当前行的开始时间减去上一个结束时间和从当前行的开始时间减去上一个错误时间之间)。看看上面的例子,因为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返回max minutes,它是前一个jb_id的最后一个项目结束时间和新jb_id的开始时间的时间增量,而不是返回NaN(因为这是一个新作业)
我怀疑解决方案可能涉及使用groupby,然后根据jb_id查找timedelta groupby
目前没有回答
相关问题 更多 >
编程相关推荐