Pandas基于正则匹配选列进行多列求和的优化方法咨询
多分组列聚合的优化实现方案
针对列数多、分组规则多的批量聚合场景,核心优化思路是将规则与处理逻辑解耦,避免重复编写过滤+聚合的冗余代码,以下是两种适配不同需求的实现方案:
方案1:规则字典批量生成(适配复杂正则场景)
适合分组匹配规则不统一、存在特殊匹配逻辑(比如某分组需要同时匹配多个前缀、排除特定列)的场景:
- 先将所有分组的匹配规则存入独立字典,后续新增、修改分组仅需调整字典内容,无需改动核心处理逻辑
- 实现代码:
# 定义分组规则:键为最终输出的列名,值为对应正则匹配规则 group_rules = { "A": r"^A\d+$", "B": r"^B\d+$", # 新增C、D等分组直接在此追加规则即可 } # 批量生成聚合结果 result = pd.DataFrame( { group_name: test.filter(regex=rule).sum(axis=1) for group_name, rule in group_rules.items() } )
- 特性:灵活度最高,完全兼容原有单组过滤逻辑,支持任意复杂的正则匹配规则。
方案2:按列名分组直接聚合(适配命名高度规律场景)
如果所有列的命名规则完全统一(比如均为「分组前缀+序号」的固定结构),可以直接从列名提取分组键,省去手动编写过滤规则的步骤:
- 先提取每个列对应的分组标识,以当前示例为例,提取列名第一个字符作为分组标识即可;如果是更复杂的命名规则,可以通过正则提取对应前缀:
test.columns.str.extract(r"(^\D+)")[0] - 直接按列方向分组求和:
# 提取列名对应的分组键 col_group_keys = test.columns.str[0] # 按分组聚合生成结果 result = test.groupby(col_group_keys, axis=1).sum()
- 特性:代码量最少,自动适配新增的同规则列,后续新增符合命名规律的列时,无需额外修改代码。
两种方案的默认空值处理逻辑与原有代码完全一致,
sum方法默认跳过pd.NA等空值,无需额外调整参数。
内容的提问来源于stack exchange,提问作者Snowflake
相关产品推荐
相关产品推荐

