如何在DataFrame中删除与上一行列值互换的当前行
Pandas 相邻互换值行删除实现方案
核心逻辑无需逐行遍历,借助pandas内置的移位方法shift()做向量化判断即可,性能远高于逐行循环写法。
实现步骤
- 用
shift(1)获取每一行对应的上一行的列取值 - 构造布尔掩码,标记所有同时满足两个删除条件的行
- 过滤掉标记为待删除的行,得到最终结果
完整代码
import pandas as pd # 构造示例原始数据集 df = pd.DataFrame({ 'Column1': ['A', 'B', 'A', 'A', 'D', 'B'], 'Column2': ['B', 'A', 'C', 'D', 'A', 'C'] }) # 构造待删除行的判断掩码 drop_condition = ( (df['Column1'] == df['Column2'].shift(1)) & (df['Column2'] == df['Column1'].shift(1)) ) # 过滤待删除行,重置索引(可选) df_clean = df[~drop_condition].reset_index(drop=True)
结果验证
运行后打印df_clean输出完全匹配预期结果:
Column1 Column2 0 A B 1 A C 2 A D 3 B C
说明
- 首行不存在上一行,
shift()取值为NaN,判断结果自动为False,不会被误删,无需额外做边界处理 - 该实现为向量化运算,十万级以上数据量场景下性能远高于
iterrows()、itertuples()等逐行遍历写法 - 该逻辑严格匹配「仅和紧邻上一行做值互换校验」的需求,如果需要全局匹配所有存在值互换的行(不限相邻),需要额外调整判断逻辑
内容的提问来源于stack exchange,提问作者Reoun
相关产品推荐
相关产品推荐

