为何Pandas groupby与duplicated检测重复对结果矛盾?
问题原因与解决方案
矛盾原因
你用groupby.filter时的判断逻辑完全错误:
lambda x: len(x) < 1是要筛选分组内数据量小于1的分组,但按cod_tbl和cod_entry分组后,每个分组必然包含至少1条数据(分组本身基于存在的键对生成),所以必然返回空DataFrame。- 而
df.duplicated(subset=['cod_tbl','cod_entry'])是标记重复出现的键对(默认从第二次出现开始标记为True),能正确识别非首次出现的重复项,因此返回多个True值。
正确的groupby用法
如果想用groupby筛选所有存在重复的cod_tbl+cod_entry对,需把判断条件改为len(x) >= 2,这样就能拿到所有属于重复组的数据:
# 筛选出所有存在重复的键对对应的行 gp = df.groupby(['cod_tbl','cod_entry']).filter(lambda x: len(x) >= 2) print(gp)
如果仅需统计每个键对的重复次数,可直接用size():
# 统计每个cod_tbl+cod_entry对的出现次数 counts = df.groupby(['cod_tbl','cod_entry']).size() # 筛选出出现次数≥2的重复对 duplicate_pairs = counts[counts >= 2] print(duplicate_pairs)
两种方法的差异
duplicated:返回布尔序列,标记每一行是否为非首次出现的重复项,适合快速标记或删除重复行。groupby.filter:返回符合条件的整行数据,适合一次性提取所有重复组的记录,便于查看重复的具体内容。
内容的提问来源于stack exchange,提问作者Yuhan
相关产品推荐
相关产品推荐

