如何迭代为DataFrame列分配权重计算加权均值并存储到原表
pandas DataFrame多列加权均值列表适配实现方案
报错原因
你提供的迭代代码score_df["weighted_avg"] += weight * score_df[feature]报错的核心原因是首次累加前没有初始化weighted_avg列的初始值为0,直接执行+=操作会因目标列不存在触发报错。
适配列表场景的实现方案
首先提前准备顺序一一对应的特征列列表、权重列表:
# 特征与权重顺序严格对应即可,可按需修改长度 feature_list = ["s1", "s2", "s3"] weight_list = [0.5, 0.25, 0.25]
方案1:迭代累加修正版
和你原来的实现逻辑一致,仅增加初始化步骤即可正常运行:
# 先初始化加权均值列为0 score_df["weighted_avg"] = 0 # 迭代累加计算 for feature, weight in zip(feature_list, weight_list): score_df["weighted_avg"] += weight * score_df[feature]
方案2:向量化运算版(性能更优)
无需显式迭代,适合特征列数量较多的场景:
score_df["weighted_avg"] = (score_df[feature_list] * weight_list).sum(axis=1)
以上两种方案的计算结果与你手动编写的固定列加权代码完全一致,仅需调整feature_list和weight_list的内容即可适配任意数量的数值列,无需修改核心逻辑。
内容的提问来源于stack exchange,提问作者rick458
相关产品推荐
相关产品推荐

