熊猫时间序列分析-汇总数据框的状态变化/删除多余的日期

时间:2019-07-09 22:47:26

标签: python pandas

我有一个类似以下的数据框(以下数据经过简化以提供一个最小的示例):

df = 
item state            startTime             endTime
   A     1  2019-05-01 04:30:00 2019-05-02 04:30:00
   A     1  2019-05-02 04:30:00 2019-05-04 04:30:00
   A     1  2019-05-04 04:30:00 2019-05-10 04:30:00
   A     2  2019-05-10 04:30:00 2019-05-12 04:30:00
   A     2  2019-05-12 04:30:00 2019-05-13 04:30:00
   A     1  2019-05-13 04:30:00 2019-05-25 04:30:00

其中项A从2019-05-01 04:30:00到2019-05-10 04:30:00处于状态1,然后从2019-05-10 04:30:00到2019处于状态2 -05-13 04:30:00,然后从2019-05-13 04:30:00到2019-05-25 04:30:00返回状态1。

我试图简化数据帧,使其只有3行提供相同的信息,使用从第一次出现状态开始的startTime,然后对于最后一次出现该状态的endTime,然后切换到新状态,使用endTime。

这是我要去的结果:

df = 
item state            startTime             endTime
   A     1  2019-05-01 04:30:00 2019-05-10 04:30:00
   A     2  2019-05-10 04:30:00 2019-05-13 04:30:00
   A     1  2019-05-13 04:30:00 2019-05-25 04:30:00

我要处理的实际数据帧可能长数千行,因此我希望能够快速进行此操作。希望有人可以指引我正确的方向或建议我要寻找的熊猫手术吗?我对熊猫不是那么陌生,但是不知道如何解决这个问题,并希望避免在这里重新发明轮子……

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用diffcumsum创建groupby键,然后再进行

d={'item':'first','state':'first','startTime':'min','endTime':'max'}
df.groupby([df.item,df.state.diff().ne(0).cumsum()]).agg(d)