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,确保初始状态行被保留
运行后你会得到预期的精简结果:
| Date | State |
|---|---|
| Day1 | 1 |
| Day2 | 0 |
| Day4 | 2 |
| Day5 | 0 |
内容的提问来源于stack exchange,提问作者Philipp Raub
相关产品推荐
相关产品推荐

