如何在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
相关产品推荐
相关产品推荐

