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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:06:03