假设我有以下Pandas dataframe:
df = DataFrame({'A' : [True, True, False], 'B' : [1, 1, 2], 'C' : [3, 4, 5]})
| A | B | C |
| -------- | -------- | -------- |
| True | 1 | 3 |
| True | 1 | 4 |
| False | 2 | 5 |
我想写一个函数,它将给予一个列的列表及其相应的值作为输入,它将返回过滤后的列表。比如说
def pandas_filter(df, columns_list, values_list):
return df.loc[df[columns_list] == values_list]
继续这个例子,当我编写下面的代码时
result = pandas_filter(df=df, columns_list=[A, B], values_list=[True, 1])
我想得到以下结果
| A | B | C |
| -------- | -------- | -------- |
| True | 1 | 3 |
| True | 1 | 4 |
def pandas_filter(df, columns_list, values_list):
return df.loc[df[columns_list] == values_list]
此函数返回ValueError(“无法使用多维键进行索引”)
2条答案
按热度按时间5sxhfpxr1#
你只需要把你的 eq-comparison(
==
)和all
链接起来,形成一个 mask:输出:
mqxuamgl2#
代码中有一个小错误,因为需要将columns_list中的列名指定为字符串。此外,==运算符不适用于值列表。您可以使用isin()方法,该方法允许您检查列是否包含其中一个值 在名单上。
isin()方法检查列中的每个值是否包含在相应的值列表中。