合并时间重叠的行-熊猫

时间:2018-08-08 02:43:58

标签: python pandas

据说,我有如下数据框。

    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] 

请注意,可能有超过两行时间重叠的数据。

1 个答案:

答案 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