Python 使用字典实现多个条件的函数
我正在尝试构建一个函数,该函数使用dataframe和dictionary,并根据dictionary中的条件返回dataframe。我的代码如下所示: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
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)]
知道如果一些键不匹配,如何更新上面的行吗?