如何使用字典权重对 Pandas DataFrame 列进行加权求和并添加新列-Python教程

本文介绍如何基于字典定义的权重,对 dataframe 中指定列执行逐行加权求和,并将结果作为新列高效添加,避免硬编码计算,提升可维护性与扩展性。

在数据分析中,经常需要根据业务规则为不同指标赋予权重(如篮球统计中得分 pts 权重为 1、篮板 reb 为 1.2、助攻 ast 为 1.5、失误 tov 为 −1),再对各行进行加权求和生成综合评分(如 score)。若手动编写 df[‘pts’] * 1 + df[‘reb’] * 1.2 + …,不仅冗长易错,且权重变更时需多处修改。更优雅的方式是利用 Pandas 内置的 .dot() 方法,结合字典构建权重向量,实现声明式、可配置的加权计算。

核心思路是:将权重字典转换为 pd.Series,其索引对应目标列名;再调用 df[columns].dot(weights),Pandas 会自动按列名对齐并执行行级点积(即每行各列值 × 对应权重,再求和)。

以下为完整实现示例:

import pandas as pd

# 原始数据
df = pd.DataFrame({
    'id': [1, 2, 3],
    'pts': [25, 20, 9],
    'ast': [8, 14, 7],
    'reb': [1, 4, 9],
    'oth': [5, 6, 7],  # 不参与加权(字典中未定义)
    'tov': [4, 2, 1]
})

# 权重字典:仅对需参与计算的列定义系数
score_dict = {'pts': 1.0, 'reb': 1.2, 'ast': 1.5, 'tov': -1.0}

# 构建权重 Series(关键:索引必须与目标列名完全一致)
weights = pd.Series(score_dict)

# 执行加权求和 → 自动对齐列名,忽略字典中不存在的列(如 'oth'、'id')
# 注意:只传入字典中出现的列,确保安全对齐
target_cols = list(score_dict.keys())
df['score'] = df[target_cols].dot(weights)

print(df)

输出:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何使用字典权重对 Pandas DataFrame 列进行加权求和并添加新列-Python教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3999215+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3999215+
  • 本周更新: 0+
  • 最后更新: 2026-03-16