如何在非对称数据集上实现列的条件式成对求和?
自动识别成对列并求和合并的Pandas实现方案
针对200+列的非对称数据集,自动匹配如v2/v2_tocomb、v3_1/v3_tocomb_1这类成对列,求和生成新列并删除原列的实现如下:
1. 模拟测试数据
先构造和场景一致的非对称数据集:
import pandas as pd data = { 'id': [1, 2, 3], 'v1': [10, 20, 30], # 无对应合并列 'v2': [5, 6, 7], 'v2_tocomb': [15, 16, 17], 'v3_1': [8, 9, 10], 'v3_tocomb_1': [12, 13, 14], 'v4': [25, 26, 27] # 无对应合并列 } df = pd.DataFrame(data)
2. 核心实现代码
通过字符串匹配自动识别配对列,完成求和与列清理:
# 获取全部列名列表 cols = df.columns.tolist() # 筛选所有带_tocomb后缀的列 tocomb_cols = [col for col in cols if '_tocomb' in col] # 遍历处理每一组配对列 for tocomb_col in tocomb_cols: # 推导对应的原始列名(移除_tocomb后缀) original_col = tocomb_col.replace('_tocomb', '') # 仅当原始列存在时执行合并 if original_col in cols: # 生成合并列名:适配带数字后缀的列格式 if '_' in original_col: comb_col = original_col.replace('_', '_comb_') else: comb_col = f"{original_col}_comb" # 两列求和生成新列 df[comb_col] = df[original_col] + df[tocomb_col] # 删除原始的配对列 df.drop([original_col, tocomb_col], axis=1, inplace=True)
3. 输出结果
执行后得到的最终数据集:
id v1 v4 v2_comb v3_comb_1 0 1 10 25 20 20 1 2 20 26 22 22 2 3 30 27 24 24
关键说明
- 自动适配带数字后缀的列名(如
v3_1/v3_tocomb_1),无需手动配置配对规则 - 加入列存在性检查,避免因部分列无对应合并项导致报错
- 保留无配对的原始列(如
v1、v4),仅处理存在有效配对的列
内容的提问来源于stack exchange,提问作者AngelMarcos
相关产品推荐
相关产品推荐

