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

时间:2018-07-31 17:22:01

标签: python pandas sum conditional pandas-groupby

我正在尝试根据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

1 个答案:

答案 0 :(得分:0)

您可以使用布尔掩码:

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