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

Pandas如何保留时间序列中连续重复块的首条记录?

保留连续重复块首条记录的Pandas解决方案

要实现仅保留连续重复值块的首条记录(而非全局去重),可以利用Pandas的shift()方法生成布尔掩码来筛选目标行,这恰好适配pd.merge_asof对缓变时间序列的压缩需求。

核心代码

假设你的DataFrame中,时间列为索引,值列名为value:

# 生成掩码:当前行值与上一行不同时标记为True
mask = df['value'] != df['value'].shift()
# 筛选得到压缩后的DataFrame
compressed_df = df[mask]

原理说明

  • df['value'].shift()会将上一行的value值下移一行,第一行的移位结果为NaN
  • NaN与任何值比较都会返回True,因此第一行会被保留
  • 后续行仅当值发生变化时(即进入新的连续重复块)才会被选中,完美保留每个块的起始记录

示例验证

针对你提供的原始数据:

2023-01-01  A
2023-01-02  B
2023-01-03  B
2023-01-04  B
2023-01-05  C
2023-01-06  C
2023-01-07  A
2023-01-08  B

执行代码后得到的compressed_df即为目标结果:

2023-01-01  A
2023-01-02  B
2023-01-05  C
2023-01-07  A
2023-01-08  B

替代方案(分组法)

如果需要更直观的分组逻辑,也可以通过生成连续分组键来实现:

# 创建连续重复块的分组键
df['group_key'] = (df['value'] != df['value'].shift()).cumsum()
# 按分组取首条记录并删除临时键
compressed_df = df.groupby('group_key').first().drop(columns='group_key')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:55:19