使用pandas duplicated()筛选多次诺奖获奖者时遗漏重复行问题
多次诺贝尔奖获奖者筛选实现方案
问题根因
pandas的duplicated()方法的原生逻辑为:仅标记重复条目中,除keep参数指定保留项之外的行。因此无论设置keep='first'还是keep='last',都会漏掉1条重复记录,这是方法设计特性,并非代码逻辑错误。
你此前三次测试输出结果一致,是因为当单个姓名仅重复2次时,keep='first'会标记第2次出现的行,keep='last'会标记第1次出现的行,你取出的比对样本刚好是对应的重复条目,所以布尔校验返回True,但此时筛选结果始终少了1条对应的重复记录。
正确实现方案
方案1:直接配置keep=False参数
将keep参数设为False后,所有存在重复的行(包括首次、末次出现的行)都会被标记为True,直接筛选即可得到所有获奖次数≥2的获奖者的全部记录:
lucky_winners = df[df.duplicated(['full_name'], keep=False)]
方案2:分组计数后筛选(扩展性更强)
如果需要统计获奖者的获奖次数、或做多维度过滤,可以先对姓名列分组计数,再反向筛选原表:
# 统计每个姓名的获奖次数 winner_count = df['full_name'].value_counts() # 筛选出获奖次数≥2的姓名列表 multiple_winner_names = winner_count[winner_count >= 2].index # 匹配原表所有符合条件的记录 lucky_winners = df[df['full_name'].isin(multiple_winner_names)]
该方案支持后续扩展按获奖次数排序、按获奖类别筛选等需求,适用场景更广。
内容的提问来源于stack exchange,提问作者ARHAM RUMI
相关产品推荐
相关产品推荐

