[英]Remove all groups with more than N observations
如果某個值在某列中出現兩次以上,那么我要刪除它所在的每一行。
輸入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')
這段代碼是完全錯誤的,但可以幫助解釋我的嘗試。
使用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
使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.