根据每组真值的数量删除行 - Python

deleting rows based on number of true values per group - Python

我正在尝试根据 groupby 和 True 值的数量删除行。 每组,如果它们只有一个真值 (sum() = 1),我希望删除那一行。

import pandas as pd
df = pd.DataFrame({'id': [1,1,1,2,2,2,3,3,3], 'value': [True, True, False, True, False, False, False, False, True]})

print (df) 
   id  value
0   1   True
1   1   True
2   1  False
3   2   True
4   2  False
5   2  False
6   3  False
7   3  False
8   3   True

df.groupby('id')['value'].sum()
Out[571]: 
id
1    2.0
2    1.0
3    1.0

id 1 和 3 符合条件,但我如何删除那些单一的真实行,以便数据框变为:

print (df) 
   id  value
0   1   True
1   1   True
2   1  False
3   2  False
4   2  False
5   3  False
6   3  False

您可以使用布尔掩码:

m1 = df.groupby('id')['value'].transform('sum') == 1
m2 = df['value']

df = df[~(m1 & m2)].reset_index(drop=True)

print(df)

   id  value
0   1   True
1   1   True
2   1  False
3   2  False
4   2  False
5   3  False
6   3  False