尝试从python中的列列表制作布尔掩码

时间:2018-10-13 13:59:39

标签: python pandas dataframe indexing

我正在尝试从列列表中创建一个布尔掩码。

print(mydata[evidencenames] == evidences)

mydata [evidencenames]给出了一个包含3列的pandas数据框,而证据为列表中的每个列提供了一个值。但是当我尝试运行它时,它给了我这个错误:

  

带有块值的无效广播比较[['Female',47,78]]

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您可以使用pd.DataFrame.isin。对于您的查询,需要具有列表值的字典:

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