Pandas DataFrame如何清空与上一行ColA、ColB重复的当前行列值
Pandas 相邻重复列值清空实现方案
以下是无需手动遍历的高效实现,完全规避索引越界问题:
第一步:构造测试数据
import pandas as pd # 构建示例DataFrame df = pd.DataFrame({ "ColA": ["Apple", "Apple", "Apple"], "ColB": ["Fruit", "Fruit", "Arrow"], "ColC": ["Food", "Pie", "Story"] })
第二步:核心逻辑实现
利用Pandas内置的shift()方法将数据下移一行,直接批量对比当前行与上一行的列值,相同则置为空:
# 判断ColA、ColB同时与上一行相等的行,将对应两列置为空字符串 df.loc[ (df["ColA"] == df["ColA"].shift(1)) & (df["ColB"] == df["ColB"].shift(1)), ["ColA", "ColB"] ] = ""
输出验证
打印结果即可得到预期输出:
ColA ColB ColC 0 Apple Fruit Food 1 Pie 2 Apple Arrow Story
原循环方案报错原因
之前遍历出现索引越界,是因为循环时取当前行的下一行做对比,遍历到最后一行时,下一行索引超出了DataFrame的总长度,所以抛出异常。使用内置shift()方法不需要手动处理索引边界,运行效率也远高于自定义循环。
如果需要保留空值格式而非空字符串,将代码中的""替换为pd.NA即可。
内容的提问来源于stack exchange,提问作者John Taylor
相关产品推荐
相关产品推荐

