Martijn
Martijn

Reputation: 105

Trying to make a boolean mask from a list of columns in python

I'm trying to create a boolean mask from a list of columns.

print(mydata[evidencenames] == evidences)

mydata[evidencenames] gives a pandas dataframe with 3 columns and evidences gives a value for each of those columns in a list. but when i try to run it, it gives me this error:

Invalid broadcasting comparison [['Female', 47, 78]] with block values

How do I solve this?

Upvotes: 1

Views: 1053

Answers (1)

jpp
jpp

Reputation: 164673

You can use pd.DataFrame.isin. For your query, a dictionary with list values is required:

df = pd.DataFrame([['Female', 57, 78], ['Female', 47, 78], ['Female', 47, 75]],
                  columns=['Col1', 'Col2', 'Col3'])

evidencenames = ['Col1', 'Col2', 'Col3']
searchvalues = ['Female', 47, 78]

d = dict(zip(evidencenames, ([i] for i in searchvalues)))

df_masked = df[df[evidencenames].isin(d).all(1)]

print(df_masked)

     Col1  Col2  Col3
1  Female    47    78

Upvotes: 1

Related Questions