如何在Pandas多列中匹配可变数量的值筛选对应DataFrame行
Pandas多列多匹配值筛选函数实现
核心逻辑
- 利用pandas原生
isin()方法实现单列多值的或匹配 - 多列筛选规则默认使用且关系叠加,可按需调整逻辑
完整函数代码
import pandas as pd def filter_df_by_multi_match(df: pd.DataFrame, filter_config: dict) -> pd.DataFrame: """ 按自定义规则筛选DataFrame子集 :param df: 待筛选的原始DataFrame :param filter_config: 筛选规则字典,键为目标列名,值为该列需要匹配的所有值组成的列表 :return: 符合筛选规则的DataFrame副本 """ # 初始化布尔筛选掩码 filter_mask = pd.Series(True, index=df.index) for col, match_values in filter_config.items(): filter_mask &= df[col].isin(match_values) return df.loc[filter_mask].copy()
调用示例
1. 构造测试数据
test_data = pd.DataFrame({ "column_a": ["a", "b", "c", "d", "a", "c"], "column_b": ["A", "B", "X", "C", "X", "A"], "count": [1, 2, 3, 4, 5, 6] })
2. 定义筛选规则
示例规则:column_a匹配a或b,同时column_b匹配A、B或X
filter_rules = { "column_a": ["a", "b"], "column_b": ["A", "B", "X"] }
3. 执行筛选
filtered_df = filter_df_by_multi_match(test_data, filter_rules) print(filtered_df)
输出结果
column_a column_b count
0 a A 1
1 b B 2
4 a X 5
自定义调整说明
- 如需将多列规则的逻辑从「且」改为「或」,只需将代码中
filter_mask &= df[col].isin(match_values)的&=替换为|= - 如需匹配排除指定值的规则,将
df[col].isin(match_values)改为~df[col].isin(match_values)即可
内容的提问来源于stack exchange,提问作者ponderwonder
相关产品推荐
相关产品推荐

