Python 熊猫时间序列分析-总结数据帧中的状态变化/删除冗余日期

Python 熊猫时间序列分析-总结数据帧中的状态变化/删除冗余日期,python,pandas,Python,Pandas,我有一个如下所示的数据框架(下面的数据经过简化以提供一个简单的示例): 其中项目A在2019-05-01 04:30:00至2019-05-10 04:30:00期间处于状态1,然后在2019-05-10 04:30:00至2019-05-13 04:30:00期间处于状态2,然后在2019-05-13 04:30:00至2019-05-25 04:30:00期间返回状态1 我试图将数据帧简化为只有3行提供相同的信息,使用状态第一次出现时的开始时间,然后在切换到新状态之前该状态最后一次出现时的结

我有一个如下所示的数据框架(下面的数据经过简化以提供一个简单的示例):

其中项目A在2019-05-01 04:30:00至2019-05-10 04:30:00期间处于状态1,然后在2019-05-10 04:30:00至2019-05-13 04:30:00期间处于状态2,然后在2019-05-13 04:30:00至2019-05-25 04:30:00期间返回状态1

我试图将数据帧简化为只有3行提供相同的信息,使用状态第一次出现时的开始时间,然后在切换到新状态之前该状态最后一次出现时的结束时间

以下是我想要的结果:

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
我正在处理的实际数据帧可能有数千行长,因此我希望能够快速完成此操作。希望有人能给我指引正确的方向,或者给我推荐我正在寻找的熊猫业务?我对熊猫并不陌生,但不知道如何处理这个问题,我想避免在这里重新发明轮子


提前感谢您的帮助。

您可以使用
diff
cumsum
创建
groupby
键,然后使用agg

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

您可以使用
diff
cumsum
创建
groupby
键,然后使用agg

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