Python 使用字典实现多个条件的函数

Python 使用字典实现多个条件的函数,python,pandas,Python,Pandas,我正在尝试构建一个函数,该函数使用dataframe和dictionary,并根据dictionary中的条件返回dataframe。我的代码如下所示: import pandas as pd column_names=['name','surname','age'] lfa=[("tom","jones",44),("elvis","prestley",50),("jim","reev

我正在尝试构建一个函数,该函数使用dataframe和dictionary,并根据dictionary中的条件返回dataframe。我的代码如下所示:

import pandas as pd
column_names=['name','surname','age']
lfa=[("tom","jones",44),("elvis","prestley",50),("jim","reeves",30)]
lfa=pd.DataFrame(lfa,columns=column_names)

def flip(df,conditions):
   return (df[(df['name'].isin(['tom']))& (df['surname'].isin(['jones']))])

filter={'name':'tom','age':44}
flip(lfa,filter)
我正在努力寻找基于字典中的条件返回数据的最有效方法。即,如果我通过name=tom和age=44的过滤器,它应该在函数中应用这些条件

注意:我正在尝试构建一个通用函数,它可以接受任何具有灵活条件集的数据帧使用:

df = lfa[lfa[list(f.keys())].eq(f).all(axis=1)]

print (df)
  name surname  age
0  tom   jones   44
详细信息

首先按字典的键筛选列:

print (lfa[list(f.keys())])
    name  age
0    tom   44
1  elvis   50
2    jim   30
print (lfa[list(f.keys())].eq(f))
    name    age
0   True   True
1  False  False
2  False  False
按字典比较:

print (lfa[list(f.keys())])
    name  age
0    tom   44
1  elvis   50
2    jim   30
print (lfa[list(f.keys())].eq(f))
    name    age
0   True   True
1  False  False
2  False  False
然后通过以下方式测试每行的所有值是否匹配:

如果可能,某些键不匹配:

f={'name':'tom','age':44, 'aa':78}

df = lfa[lfa.reindex(f.keys(), axis=1).eq(f).all(axis=1)]

print (df)
Empty DataFrame
Columns: [name, surname, age]
Index: []

有没有一种方法可以应用类似的条件:f={'name':['tom','elvis']}@NumberLogic-是否可以创建所有列表,如
f={'name':['tom','elvis'],'age':[44]}
-这意味着也可以将
44
更改为一个元素列表
[4]
?我的意思是,如果我想得到第一个和第二个记录,我会想到类似的东西,f={'name':['tom','elvis'],'age':[44,50]}即选择任何名为tom或elvis且年龄为44岁或以上的记录50@NumberLogic-好的,如果所有值都是列表,那么使用
df=lfa[lfa[list(f.keys())].isin(f.all(axis=1)]
知道如果一些键不匹配,如何更新上面的行吗?