Reputation: 105
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
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