首页 > 解决方案 > 计数 if (COUNTIF) 并添加到 Python 中的数据框

问题描述

我有一个有很多重复的数据框。我找到了很多解决方案来查找重复的数量,但不是我想要的方式。如果新列的重复项少于或等于 2 个,有没有办法计算重复项?

数据框如下所示:

    NAME
0  Peter
1  Peter
2  Peter
3   Jack
4   Jack
5   Luke

但我希望它看起来像这样:

    NAME  Count
0  Peter      0
1  Peter      0
2  Peter      0
3   Jack      1
4   Jack      1
5   Luke      1

然后过滤它(删除行),这样我只有一个数据框Countis 1

    NAME  Count
0   Jack      1
1   Jack      1
2   Luke      1

如果有更简单的方法来删除重复项,那么我很高兴听到它。

标签: pythonpandasdataframeduplicatescountif

解决方案


使用GroupBy.transformwithsize计数到新列,然后过滤boolean indexing

df['count'] = df.groupby('NAME')['NAME'].transform('size')
df = df[df['count'] <= 2]

print (df)
   NAME  count
3  Jack      2
4  Jack      2
5  Luke      1

如果需要指示列将布尔值转换为整数以True,False进行1,0映射:

df['count'] = (df.groupby('NAME')['NAME'].transform('size') <= 2).astype(int)
df = df[df['count'] != 0]

print (df)
   NAME  count
3  Jack      1
4  Jack      1
5  Luke      1

map与和的替代解决方案value_counts

df['count'] = (df['NAME'].map(df['NAME'].value_counts()) <= 2).astype(int)
df = df[df['count'] != 0]

推荐阅读