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

Python Pandas:精简含状态变化的DataFrame,去除连续重复状态行

解决连续状态重复的DataFrame精简需求

嘿,我懂你的痛点——你要的不是去掉所有重复的状态值,而是只剔除连续重复的状态行,保留每次状态发生变化的节点对吧?drop_duplicates()确实满足不了这个需求,因为它会把所有重复的State都过滤掉,哪怕它们不是连续出现的(比如你例子里Day5的State=0会被误删,但你其实需要保留它,因为它和前一行的State=2是新的变化)。

具体解决方案

首先先把你的示例DataFrame调整成更规范的写法(原来的代码有点小问题,我帮你修正了):

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({
    'Date': ['Day1', 'Day2', 'Day3', 'Day4', 'Day5'],
    'State': [1, 0, 0, 2, 0]
}).set_index('Date')

接下来用一行代码实现你要的“仅去除连续未变化状态”的功能:

# 保留状态发生变化的行(包含初始的第一行)
df_reduced = df[df['State'].ne(df['State'].shift()).fillna(True)]

代码原理解释

  • df['State'].shift():将State列整体向下偏移一行,这样每一行的State就能和它的上一行State做对比
  • ne():pandas里的“不等于”方法,比普通的!=更严谨,能更好处理空值(NaN)
  • fillna(True):因为第一行没有上一行,偏移后会得到NaN,这里把NaN替换成True,确保初始状态行被保留

运行后你会得到预期的精简结果:

DateState
Day11
Day20
Day42
Day50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:41:18