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

标签 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。

这是我想要的结果:

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

我正在操作的实际数据帧可能有数千行长,因此我希望能够快速完成此操作。希望有人能引导我走向正确的方向或建议我正在寻找的 Pandas 操作吗?我对 Pandas 并不陌生,但不知道如何解决这个问题,并且希望避免在这里重新发明轮子......

预先感谢您的帮助。

最佳答案

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

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

关于python - Pandas 时间序列分析 - 总结数据帧中的状态变化/删除冗余日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56961358/

相关文章:

python - 使用 python 多处理计算蒙特卡罗模拟中的平均值

python - 如何定义跨三列的唯一约束?

python - 使用python从时间戳中提取小时

python - 从日期时间 Pandas 中提取季节

python - 如何在 Python 3 中处理多响应数据来构建频率?

python - PyQt4:停止窗口获取焦点

python - 如何从通过 PolymorphicChildModelAdmin 创建的表单中排除字段

python - Django 、Python : Best way to parse a CSV and convert to Django model instances

Python 正则表达式提取宽度 x 深度 x 高度

python - Pandas ,比较不同形状的数据框列