pandas DataFrame多条件行筛选的简洁实现方法咨询
Pandas多条件筛选紧凑写法实现方案
逻辑与(同时满足多条件)实现
你预想的元组匹配写法可以通过eq()+all(axis=1)实现,效果和&连接多个条件完全一致:
# 筛选name='A'且action='buy'的行 df1 = df[df[['name', 'action']].eq(('A', 'buy')).all(axis=1)]
原理:eq()方法会将DataFrame的每一列和元组对应位置的值做等值匹配,返回布尔类型的DataFrame;all(axis=1)会判断每一行的所有布尔值是否都为True,只有所有条件都满足的行才会被保留。
逻辑或(满足任意条件)实现
对应|连接多条件的场景,把all(axis=1)替换为any(axis=1)即可:
# 筛选name='A'或class='sub'的行 df2 = df[df[['name', 'class']].eq(('A', 'sub')).any(axis=1)]
原理:any(axis=1)只要某一行有任意一个布尔值为True,就会返回True,对应逻辑或的效果。
更灵活的复杂混合逻辑方案
如果涉及与或非混合的多条件筛选,更推荐使用query()方法,写法更简洁易读,接近自然语言:
# 逻辑与写法 df1 = df.query("name == 'A' and action == 'buy'") # 逻辑或写法 df2 = df.query("name == 'A' or class == 'sub'") # 引用外部变量写法,变量前加@符号即可 target_name = 'A' df3 = df.query("name == @target_name and action != 'sell'")
内容的提问来源于stack exchange,提问作者Tristan Tran
相关产品推荐
相关产品推荐

