为什么我的 pandas 过滤器在不同的步骤中工作,而不是在一个命令中工作?
Why does my pandas filters work in separate steps but not in one command?
我在用一条命令过滤 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 个未全部遵循过滤器的观察结果。多合一过滤器结构不正确吗?
我相信你需要额外的一对括号:
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
]
我在用一条命令过滤 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 个未全部遵循过滤器的观察结果。多合一过滤器结构不正确吗?
我相信你需要额外的一对括号:
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
]