Pandas DataFrame标记所有重复项(含首次实例)无NaN输出的实现方法
解决方案
Pandas的duplicated方法本身就支持标记全部重复项(包含首次出现的实例),只需要指定keep=False参数即可,一行代码就能实现需求,不会产生NaN值:
emp["duplname"] = emp.duplicated(subset=["Name"], keep=False)
参数说明
subset=["Name"]:指定仅按照Name列判断重复,如果你需要多列组合判断重复,在列表里加对应的列名即可keep=False:所有重复出现的样本都会被标记为True,不管是不是首次出现
运行后得到的emp结果如下,完全符合你的预期:
Name Age City duplname 0 Mohd 28 NY False 1 Anne 32 London True 2 Aaditya 25 Mumbai True 3 Anne 32 London True 4 Anne 32 London True 5 Anne 32 Mumbai True 6 Aaditya 40 Dubai True 7 Link 32 London False
你之前代码出现大量NaN的原因是:
value_counts()返回的结果索引是dup_index的取值,直接给emp['counts']赋值时会按照DataFrame的行索引对齐,两者索引不匹配的行就会自动填充为NaN。
如果你需要同时统计每个姓名的出现次数,可以用groupby+transform实现,也不会产生NaN:
emp['counts'] = emp.groupby('Name')['Name'].transform('count')
内容的提问来源于stack exchange,提问作者NPD
相关产品推荐
相关产品推荐

