pandas - 如何使用 key :value pairs from a dict to build a pandas filter

标签 pandas jupyter-notebook

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

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

关于pandas - 如何使用 key :value pairs from a dict to build a pandas filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71883091/

相关文章:

pandas - 如果列不在特定列表中,则从 Pandas 数据框中删除列

python - 将 json 数据(未定义/困惑)转换为 DataFrame 的正确方法是什么?

python - 模块未找到错误 : No module named 'mlxtend'

jupyter-notebook - 如何在 IPython 笔记本中打印 sympy 变量及其名称?

pandas - 在 'groupby()' 和 'value_counts() 函数之后选择每组的第一行

jupyter-notebook - GPU/TPU 上的 PyCaret 方法

python - Pandas Read_CSV 引用问题

unit-testing - 你如何对 Python DataFrames 进行单元测试

python - 有什么快速方法可以使用 pandas 获得时间序列数据的正确聚合输出?

jupyter-notebook - 使用击键在 jupyter 笔记本中自动格式化代码