Chins Kuriakose
Chins Kuriakose

Reputation: 149

Filter pandas dataframe columns based on value for columns in a list

I have a dataframe df defined as below :

df = pd.DataFrame()
df["A"] = ['True','True','True','True','True']
df["B"] = ['True','False','True','False','True']
df["C"] = ['False','True','False','True','False']
df["D"] = ['True','True','False','False','False']
df["E"] = ['False','True','True','False','True']
df["F"] = ['HI','HI','HI','HI','HI']
>> df

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

and a list

lst = ["A","C"]

I would like to filter the rows in df based on the values being 'True' for the columns in lst. That is, I would like to get my resultant dataframe as :

      A      B     C      D      E   F
1  True  False  True   True   True  HI
3  True  False  True  False  False  HI

Instead of looping through the column names from the list and filtering it, is there any better solution for this?

Upvotes: 4

Views: 1085

Answers (1)

Erfan
Erfan

Reputation: 42946

Use DatFrame.all over the column axis (axis=1):

df[df[lst].all(axis=1)]

      A      B     C      D      E   F
1  True  False  True   True   True  HI
3  True  False  True  False  False  HI

Details:

We get the columns in scope with df[lst], then we use all to check which rows have "all" as True:

df[lst].all(axis=1)

0    False
1     True
2    False
3     True
4    False
dtype: bool

Upvotes: 5

Related Questions