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

如何在Python中将多类过滤操作的重复函数合并为单个函数

优化方案:用配置化+分组过滤合并重复函数

核心思路

把硬编码的过滤规则、分组列做配置化管理,先筛选出符合条件的数据,再通过groupby批量处理,彻底消除重复代码和冗余的合法性检查。

步骤1:统一配置过滤规则

将所有可选过滤列的允许值集中维护,避免分散硬编码:

# 配置所有可选过滤列的允许值,按需补充另外两个列的规则
FILTER_RULES = {
    "Country": ["USA", "UK"],
    "Kind": ["A", "B"],
    # "Type": ["X", "Y"],  # 示例:新增过滤列的规则
    # "Region": ["North", "South"]
}

步骤2:实现通用处理函数

这个函数接收分组列列表,自动完成数据筛选→分组处理→结果存储全流程:

import pandas as pd

def process_data(df, group_columns=None):
    group_columns = group_columns or []
    
    # 1. 先筛选出符合过滤规则的数据
    filtered_df = df.copy()
    for col, allowed_values in FILTER_RULES.items():
        if col in group_columns:
            filtered_df = filtered_df[filtered_df[col].isin(allowed_values)]
    
    # 2. 处理无分组的全量数据
    if not group_columns:
        results = operation(filtered_df)
        # 所有过滤列默认填充"-"
        store_kwargs = {col: "-" for col in FILTER_RULES.keys()}
        store_results(results, **store_kwargs)
        return
    
    # 3. 按指定列分组处理
    for group_keys, group_df in filtered_df.groupby(group_columns):
        # 兼容单个分组列的情况,确保键为元组格式
        group_keys = (group_keys,) if not isinstance(group_keys, tuple) else group_keys
        # 生成当前分组的参数
        store_kwargs = dict(zip(group_columns, group_keys))
        # 未参与分组的列填充"-"
        for col in FILTER_RULES.keys():
            if col not in store_kwargs:
                store_kwargs[col] = "-"
        # 执行操作并存储结果
        results = operation(group_df)
        store_results(results, **store_kwargs)

步骤3:替代原有8个函数

原来的不同层级函数,现在只需调用通用函数并传入对应分组列即可:

# 替代operation_at_country_kind_level
process_data(df, group_columns=["Country", "Kind"])

# 替代operation_at_country_level
process_data(df, group_columns=["Country"])

# 替代无过滤的函数
process_data(df)

# 其他分组组合示例(比如按Kind+Type)
process_data(df, group_columns=["Kind", "Type"])

优势说明

  • 消除冗余检查:先通过isin筛选合法数据,groupby后无需再校验分组值合法性
  • 配置化易维护:过滤规则集中管理,修改允许值或新增列只需调整FILTER_RULES
  • 参数自动生成:通过字典推导自动拼接store_results的参数,无需手动硬编码
  • 扩展性强:新增分组组合时,无需修改函数逻辑,仅需调整调用参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:47:31