从 Pandas 数据框中删除值出现不止一次的行

Remove rows from Pandas dataframe where values appears more than once

我有一个数据框:

ID  EM_results  pa_id_1850
 0           0           1 
 1           1           1 
 2           0           1 
 3           0           2 
 4           0           2 
 5           1           3 
 6           1           3 
 7           0           3 

我想删除所有出现 EM_results 的行,因为每个 pa_id_1850 索引不止一次出现 1 行。在这种情况下:

ID  EM_results  pa_id_1850
 0           0           1 
 1           1           1 
 2           0           1 
 3           0           2 
 4           0           2 

我试过类似的东西:

grouped = df.groupby('pa_id_1850')    
grouped.filter(lambda x: (x['EM_results'] == 1) <= 1)

但我不能完全让它工作

transform 的帮助下计算布尔掩码,然后将其应用于数据框。

>>> mask = df.groupby('pa_id_1850')['EM_results'].transform('sum').le(1)
>>> df = df[mask]
>>> df
   ID  EM_results  pa_id_1850
0   0           0           1
1   1           1           1
2   2           0           1
3   3           0           2
4   4           0           2

您的尝试很接近:filter 需要 return 标量,而不是系列。实现此目的的一种方法是过滤每组中 EM_results 值的总和,假设这些值仅是 0 或 1:

grouped = df.groupby('pa_id_1850')    
grouped.filter(lambda x: (x['EM_results'].sum()) <= 1)

# Output:

   ID  EM_results  pa_id_1850
0   0           0           1
1   1           1           1
2   2           0           1
3   3           0           2
4   4           0           2