首页 > 解决方案 > 为什么我的 pandas 过滤器在单独的步骤中工作,而不是在一个命令中工作?

问题描述

我在一个命令中过滤我的 pandas 数据帧时遇到问题。例如,以下多步过滤器可以完美运行:

check2020 = check[check['effyear'] == '2020']
check2020_can = check2020[check2020['canceled'] == 'Y']
check2020_can_6 = check2020_can[check2020_can['decile'] == 6]
check2020_can_6_p_s = check2020_can_6[(check2020_can_6['usage'] == 'P') | (check2020_can_6['usage'] == 'S')]

但是,如果我要执行以下操作:

check[(check['effyear'] == '2020') & (check['canceled'] == 'Y') & (check['decile'] == 6) & (check['usage'] == 'P') | (check['usage'] == 'S')]

然后我又得到了 30,000 个观察结果,这些观察结果并不都遵循过滤器。多合一过滤器是否结构不正确?

标签: pythonpandasfilterslice

解决方案


我相信你需要额外的括号:

check[(check['effyear'] == '2020') & 
      (check['canceled'] == 'Y') & 
      (check['decile'] == 6) & 
      ((check['usage'] == 'P') | (check['usage'] == 'S')) # () here
     ]

此外,使用isin更好的语法:

check[(check['effyear'] == '2020') & 
      (check['canceled'] == 'Y') & 
      (check['decile'] == 6) & 
      check['usage'].isin(['P', 'S'])  # this
     ]

推荐阅读