Filtering Boolean in Dataframe

Viewed 89

I have a df with ±100k rows and 10 columns. I would like to find/filter which rows contain at least 2 to 4 True values. For simplicity's sake, let's say I have this df:

 A   B     C     D     E     F
 1  True  True  False False True  
 2  False True  True  True  False 
 3  False False False False False  
 4  True  False False False True  
 5  True  False False False False 

Expected output:

A   B     C     D     E     F
1  True  True  False False True  
2  False True  True  True  False 
4  True  False False False True  

I have tried using

df[(df['B']==True) | (df['C']==True) | (df['D']==True)| (df['E']==True)| (df['F']==True)]

But this only eliminates False rows and doesn't work if I want to find instances of at least 2/3 True.

Can anyone please help? Appreciate it.

1 Answers

Use DataFrame.select_dtypes for only boolean columns, count Trues by sum and then filter values by Series.between in boolean indexing:

df  = df[df.select_dtypes(bool).sum(axis=1).between(2,4)]
print (df)
   A      B      C      D      E      F
0  1   True   True  False  False   True
1  2  False   True   True   True  False
3  4   True  False  False  False   True
Related