如何删除pandas DataFrame重复行,仅移除每组重复项中的最后一条记录
pandas删除重复行时仅移除每组最后一条的实现方案
pandas自带的drop_duplicates仅支持保留每组重复项的第一条或最后一条,要实现仅移除每组重复项的最后一条、保留其余所有记录,可以用以下两种方案:
方案1:利用duplicated方法筛选(性能更优)
核心逻辑是通过duplicated的参数组合直接筛选需要保留的行:
import pandas as pd # 示例输入 X = pd.DataFrame({"col1": list('acbcaa')}) # 核心代码:保留重复组内非最后一条的行 + 无重复的唯一行 X = X[X.duplicated(keep='last') | ~X.duplicated(keep=False)]
运行后得到的结果和预期一致,X['col1']的值为['a','c','b','a']。
如果需要按指定多列判断重复,只需在duplicated中添加subset参数指定列名列表即可,例如按col1和col2两列判断重复:
X = X[X.duplicated(subset=['col1','col2'], keep='last') | ~X.duplicated(subset=['col1','col2'], keep=False)]
方案2:利用groupby分组截断(逻辑更直观)
对每个重复组单独处理,长度大于1的组移除最后一条,否则全保留:
X = X.groupby('col1', group_keys=False).apply(lambda g: g.iloc[:-1] if len(g) > 1 else g)
多列判断重复时,把groupby的参数替换为列名列表即可。
内容的提问来源于stack exchange,提问作者Nayana Madhu
相关产品推荐
相关产品推荐

