Pandas如何基于可变长度条件列表实现多条件OR逻辑过滤
动态多或条件过滤DataFrame实现方案
等值匹配场景(对应你当前的需求)
你需要的「判断列值等于条件列表中任意一个值」的逻辑,pandas已经提供了原生的isin()方法,无需手动拼接|运算符,天然支持任意长度的条件列表,写法如下:
# condList可以是任意长度的列表,包含重复值也不影响最终过滤结果 fil = df['col'].isin(condList)
这行代码的执行效果和你手动写N个(df['col'] == cond_x) |拼接的逻辑完全一致,同时性能远高于手动拼接的写法,数据量越大优势越明显。
扩展:非等值多或条件场景
如果后续遇到非等值判断的或逻辑拼接(比如混合大于、小于、字符串包含等不同判断规则),无法用isin()实现时,可以借助numpy的方法自动聚合条件:
import numpy as np # 先把所有单条判断条件存入列表,长度任意 cond_list = [ df['col'] > 100, df['col'] < 0, df['col'].str.contains("关键词") ] # 自动对列表内所有条件做或运算,无需手动拼接| fil = np.logical_or.reduce(cond_list)
注意:不要直接用Python内置的
or关键字拼接pandas的布尔判断,pandas的Series对象重载的是按位或运算符|,直接用原生or会触发真值歧义报错。
内容的提问来源于stack exchange,提问作者Mockup Dungeon
相关产品推荐
相关产品推荐

