如何根据前一行数据变化过滤Pandas DataFrame行?
如何在Pandas中仅保留Value列与前一行有变化的行
要实现只保留任意Value列与前一行相比有变化的行(连续相同值仅留第一行),不能用常规的drop_duplicates(subset=...)——因为它会全局去重,哪怕非连续的重复组合也会被删掉。这里用相邻行对比的方法就能解决:
步骤1:构造示例数据
先模拟你提到的场景(需要保留第1、3、5行):
import pandas as pd data = { 'Timestamp': ['08:00', '08:01', '08:02', '08:03', '08:04'], 'Value 1': [10, 10, 15, 15, 15], 'Value 2': [20, 20, 20, 20, 25] } df = pd.DataFrame(data)
步骤2:检测相邻行的变化
用shift()获取上一行的Value列数据,再用ne()(不等于)对比当前行和上一行,最后用any(axis=1)判断任意一列是否有变化:
# 针对Value列生成差异掩码 value_cols = ['Value 1', 'Value 2'] mask = df[value_cols].ne(df[value_cols].shift()).any(axis=1) # 筛选出符合条件的行 result_df = df[mask]
结果验证
运行后result_df会保留第1、3、5行,完全符合需求:
Timestamp Value 1 Value 2 0 08:00 10 20 2 08:02 15 20 4 08:04 15 25
拓展说明
如果有更多Value列(比如Value 3、Value 4),只需要修改value_cols列表,把所有需要检测的列加进去即可,逻辑完全通用。
内容的提问来源于stack exchange,提问作者DRock99
相关产品推荐
相关产品推荐

