基于两列去重并清理不一致数据的Pandas技术问询
解决Pandas中重复ID组的不一致数据清理问题
没问题,这个需求其实可以通过分组筛选+去重两步轻松搞定,我给你详细拆解实现过程:
首先先构造你给出的示例数据方便测试:
import pandas as pd df = pd.DataFrame({ 'a': [1, 1, 2, 3, 3], 'b': [1, 1, 4, 5, 5], 'c': [1, 0, 1, 0, 0] })
完整解决方案代码
# 第一步:过滤掉同一ID组(a+b)中c值同时存在0和1的整组数据 filtered = df.groupby(['a', 'b']).filter(lambda group: group['c'].nunique() == 1) # 第二步:对剩下的验证一致的重复组,只保留一行,并重置索引 result = filtered.drop_duplicates(subset=['a', 'b']).reset_index(drop=True)
代码逐步解释
- 分组筛选矛盾组:
groupby(['a', 'b']).filter(...)会按'a'和'b'作为ID分组,然后检查每组的'c'列有多少种唯一值。如果唯一值数量是1,说明这个组的验证结果完全一致,保留整组;如果是2(同时存在0和1),就直接把这个矛盾组全部删掉。 - 去重+重置索引:经过第一步筛选后,剩下的都是验证结果统一的组,但可能有重复行。用
drop_duplicates(subset=['a', 'b'])保留每组的第一行,最后用reset_index(drop=True)把索引重置为从0开始的连续数字,得到干净的结果。
最终运行结果
执行后result就是你预期的样子:
a b c 0 2 4 1 1 3 5 0
这个方案完全适配每组有多个重复项的场景——不管同一ID组有多少条重复行,只要验证结果一致就只留一行;如果验证结果矛盾,整组都会被彻底清理。
内容的提问来源于stack exchange,提问作者Simosini
相关产品推荐
相关产品推荐

