簡體   English   中英

刪除所有觀察結果超過N個的組

[英]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.transformGroupBy.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM