如果某列中的值出现两次以上,我要删除其所在的每一行。
输入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')
此代码是完全错误的,但可以帮助解释我的尝试。
答案 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.transform
和GroupBy.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