如何使用字典中的 key:value 对构建 pandas 过滤器
How to use key:value pairs from a dict to build a pandas filter
我有一本可以任意长度的字典,例如这个:
dic = {'A':'Rome','B':'Japan','C':'EUA'}
我想构建一个函数,使用上面的字典作为参数来过滤数据框,如下所示:
def filter(dic, df):
for k,v in dic.items():
x=df[(df[k]==v) & (df[k]==v) & (df[k]==v)]
return x
如果我必须硬编码上面的过滤器将是:
df[(df['A']=='Rome') & (df['B']=='Japan') & (df['C']=='EUA')]
我面临的问题:
字典没有固定长度,每次参数个数都会变化
上面的代码没有正确遍历字典
我怎样才能使过滤功能起作用?
假设 dic
字典包含所有列,只需使用:
df[df.eq(dic).all(1)]
否则,使用:
df[df[list(dic)].eq(dic).all(1)]
示例:
dic = {'A':'Rome','B':'Japan','C':'EUA'}
df = pd.DataFrame({'A': ['Rome', 'Rome', 'Milan'],
'B': ['Japan', 'Italy', 'Japan'],
'C': ['EUA', 'Italy', 'Japan'],
'D': [1,2,3]
})
df[df[list(dic)].eq(dic).all(1)]
输出:
A B C D
0 Rome Japan EUA 1
我有一本可以任意长度的字典,例如这个:
dic = {'A':'Rome','B':'Japan','C':'EUA'}
我想构建一个函数,使用上面的字典作为参数来过滤数据框,如下所示:
def filter(dic, df):
for k,v in dic.items():
x=df[(df[k]==v) & (df[k]==v) & (df[k]==v)]
return x
如果我必须硬编码上面的过滤器将是:
df[(df['A']=='Rome') & (df['B']=='Japan') & (df['C']=='EUA')]
我面临的问题:
字典没有固定长度,每次参数个数都会变化
上面的代码没有正确遍历字典
我怎样才能使过滤功能起作用?
假设 dic
字典包含所有列,只需使用:
df[df.eq(dic).all(1)]
否则,使用:
df[df[list(dic)].eq(dic).all(1)]
示例:
dic = {'A':'Rome','B':'Japan','C':'EUA'}
df = pd.DataFrame({'A': ['Rome', 'Rome', 'Milan'],
'B': ['Japan', 'Italy', 'Japan'],
'C': ['EUA', 'Italy', 'Japan'],
'D': [1,2,3]
})
df[df[list(dic)].eq(dic).all(1)]
输出:
A B C D
0 Rome Japan EUA 1