据说,我有如下数据框。
Date Time_Start Time_End Reason
0 2018-08-05 2018-08-05 10:10:00 2018-08-05 13:35:00 blah1
1 2018-08-05 2018-08-05 12:50:00 2018-08-05 14:26:00 blah2
2 2018-08-05 2018-08-05 16:40:00 2018-08-05 17:30:00 blah3
3 2018-08-05 2018-08-05 17:00:00 2018-08-05 17:10:00 blah4
4 2018-08-06 2018-08-06 09:40:00 2018-08-06 11:23:00 blah5
我想知道熊猫是否能够合并时间重叠的行,例如将第一行的“ Time_Start”与第二行的“ Time_End”合并,并将原因附加到列表中。另一种情况是删除第四行,因为它是第三行的子时间窗口,并将原因附加到列表中。因此,我的预期输出将如下所示:
Date Time_Start Time_End Reason
0 2018-08-05 2018-08-05 10:10:00 2018-08-05 14:26:00 [blah1, blah2]
1 2018-08-05 2018-08-05 16:40:00 2018-08-05 17:30:00 [blah3, blah4]
3 2018-08-06 2018-08-06 09:40:00 2018-08-06 11:23:00 [blah5]
请注意,可能有超过两行时间重叠的数据。
答案 0 :(得分:1)
您可以在此处创建帮助键
df['newid']=(df['Time_Start']-df['Time_End'].shift()).dt.total_seconds().gt(0).cumsum()
newdf=df.groupby(['Date','newid']).agg({'Time_Start':'min','Time_End':'max','Reason':lambda x : [x.values.tolist()]}).reset_index(level=1)
newdf.assign(Reason=newdf.Reason.str[0])
Out[592]:
newid Time_Start Reason Time_End
Date
2018-08-05 0 2018-08-05 10:10:00 [blah1, blah2] 2018-08-05 14:26:00
2018-08-05 1 2018-08-05 16:40:00 [blah3, blah4] 2018-08-05 17:30:00
2018-08-06 2 2018-08-06 09:40:00 [blah5] 2018-08-06 11:23:00