如何使用字典中的键:值对来构建pandas过滤器



我有一个可以取任意长度的字典,例如:

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')]

我面临的问题:

  1. 字典没有固定的长度,所以每次参数的数量都会改变。

  2. 上面的代码没有正确地遍历字典

我如何使过滤器功能工作?

假设dic字典包含所有列,只需使用:

df[df.eq(dic).all(axis=1)]

,用途:

df[df[list(dic)].eq(dic).all(axis=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(axis=1)]
输出:

      A      B    C  D
0  Rome  Japan  EUA  1

最新更新