You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何将相邻相同状态的时序DataFrame进行扁平化压缩处理

实现方案

核心逻辑是为连续相同的state生成统一的分组标识,再分组聚合取对应字段即可完成合并,完整代码如下:

import pandas as pd

# 构造原始数据,若你已经生成带time_end的df可跳过这部分
d = {'time': ['12-08-2020', '13-08-2020', '14-08-2020', '15-08-2020', '16-08-2020'], 
     'state': ['off', 'on', 'on', 'on', 'off']}
df = pd.DataFrame(data=d)
# 生成time_end列,为你已经完成的步骤
df['time_end'] = df['time'].shift(-1)

# 生成连续相同state的分组标识
df['group'] = (df['state'] != df['state'].shift()).cumsum()

# 分组聚合得到最终结果
result = df.groupby('group', as_index=False).agg(
    time = ('time', 'first'),
    state = ('state', 'first'),
    time_end = ('time_end', 'last')
).drop('group', axis=1)

print(result)

运行后输出的结果和你要求的完全一致:

time state    time_end
0  12-08-2020   off  13-08-2020
1  13-08-2020    on  16-08-2020
2  16-08-2020   off         NaN

逻辑说明

df['state'] != df['state'].shift()会生成布尔序列,当前行状态和上一行不一致时返回True,cumsum()对布尔值累加(True计为1,False计为0),所有连续相同的state会被分到同一个分组ID下,分组后取每组第一个time作为状态起始时间,每组最后一个time_end作为状态结束时间即可完成合并。

内容的提问来源于stack exchange,提问作者ajay1738

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:06:00