如何对DataFrame中增量命名的列应用公式运算?
简便实现增量列加权求和的方法
嘿,这个需求太常见了,完全不用手动敲15个列名,给你几个高效的方案,适配不同的场景:
方案一:基于列名前缀筛选+拆分提取乘数
如果你所有目标列都是以A_开头的,先筛选出这些列,再从列名里拆分出后面的数字作为乘数,最后做加权求和:import pandas as pd # 假设你的DataFrame名为df # 筛选所有以"A_"开头的列 target_cols = [col for col in df.columns if col.startswith('A_')] # 从列名中提取乘数(比如A_3提取出3) multipliers = [int(col.split('_')[1]) for col in target_cols] # 计算加权和并添加为新列 df['weighted_sum'] = df[target_cols].mul(multipliers).sum(axis=1)这个方法的好处是自动适配所有符合命名规则的列,哪怕以后列数从15变20,代码也不用改。
方案二:正则匹配提取乘数(更严谨)
如果担心有其他类似命名的列干扰(比如A_100或者B_1),可以用正则表达式精准匹配列名,再提取乘数:# 用正则匹配A_加数字的列 target_cols = df.columns[df.columns.str.match(r'^A_\d+$')] # 提取列名中的数字部分并转为整数 multipliers = target_cols.str.extract(r'A_(\d+)', expand=False).astype(int) # 加权求和 df['weighted_sum'] = df[target_cols].mul(multipliers, axis=1).sum(axis=1)正则匹配能确保只选中你需要的列,避免误操作。
方案三:直接生成列名(列名连续时用)
如果你确定列是严格从A_1到A_15连续命名的,直接生成列名列表更简单:# 生成A_1到A_15的列名 target_cols = [f'A_{i}' for i in range(1, 16)] # 乘数就是1到15的整数 multipliers = list(range(1, 16)) # 计算结果 df['weighted_sum'] = df[target_cols].mul(multipliers).sum(axis=1)这个代码最简洁,适合列名完全连续的场景。
不管用哪个方法,都能避免手动列写15个列名,而且扩展性拉满~
内容的提问来源于stack exchange,提问作者danie
相关产品推荐
相关产品推荐

