You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中基于多列迭代筛选行并支持单/多值匹配?

Pandas 批量筛选多列满足任意条件的行

当需要筛选DataFrame中任意指定列等于单个值或属于某值列表的行时,无需手动拼接多个|条件,用any()结合批量列操作就能高效解决,以下是两种场景的实现方案:

1. 筛选任意目标列等于单个值的行

通过布尔DataFrame的行级any()判断,快速定位符合条件的行:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({"": [0,1,2,3,4,5,6,7,8],
                   "c1": ["abc1", "", "dfg", "abc1", "","dfg","ghj","abc1","abc1"], 
                   "c2": ["abc1", "abc1", "dfg", "dfg", "","dfg","","ghj","abc1"], 
                   "c3": ["abc1", "", "dfg", "dfg", "dfg","dfg","abc1","ghj","abc1"]})

# 定义目标列(c1到c100可自动生成:[f'c{i}' for i in range(1, 101)])
target_cols = ['c1', 'c2', 'c3']
target_value = "abc1"

# 核心筛选逻辑
filtered_df = df[(df[target_cols] == target_value).any(axis=1)]
print(filtered_df)

逻辑说明

  • df[target_cols] == target_value:生成与目标列结构一致的布尔DataFrame,标记每个单元格是否等于目标值
  • .any(axis=1):按行判断,只要该行任意一列满足条件就返回True
  • 最终用布尔序列直接筛选原DataFrame,得到符合要求的行子集

2. 筛选任意目标列属于值列表的行

如果需要匹配多个值(如['abc1', 'ghj']),替换为isin()方法即可:

target_values = ['abc1', 'ghj']
filtered_df = df[(df[target_cols].isin(target_values)).any(axis=1)]
print(filtered_df)

扩展技巧

针对c1到c100这类有规律的列名,无需手动枚举,用列表推导式自动生成目标列列表:

target_cols = [f'c{i}' for i in range(1, 101)]

内容的提问来源于stack exchange,提问作者AAA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:15:46