删除所有观察结果超过N个的组

时间:2019-03-05 14:30:48

标签: python pandas

如果某列中的值出现两次以上,我要删除其所在的每一行。

输入df如下:

Name   Num
  X     1
  X     2
  Y     3
  Y     4
  X     5

输出df如下:

Name   Num
  Y     3
  Y     4

我知道可以删除重复项,但这仅在我要删除找到的第一个或最后一个重复项而不是第n个重复项时有效。

df = df.drop_duplicates(subset = ['Name'], drop='third')

此代码是完全错误的,但可以帮助解释我的尝试。

2 个答案:

答案 0 :(得分:4)

使用GroupBy.cumcount进行计数并过滤所有不像2的值:

df1 = df[df.groupby('Name').cumcount() < 3]
print (df1)
  Name  Num
0    X    1
1    X    2
2    Y    3
3    Y    4

详细信息

print (df.groupby('Name').cumcount())
0    0
1    1
2    0
3    1
4    2
dtype: int64

编辑

GroupBy.transformGroupBy.size过滤:

df1 = df[df.groupby('Name')['Num'].transform('size') < 3]
print (df1)
  Name  Num
2    Y    3
3    Y    4

答案 1 :(得分:4)

使用head

df.groupby('Name').head(2)
Out[375]: 
  Name  Num
0    X    1
1    X    2
2    Y    3
3    Y    4

s=df.groupby('Name').size()<=2
df.loc[df.Name.isin(s[s].index)]
Out[380]: 
  Name  Num
2    Y    3
3    Y    4