0

0

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

碧海醫心

碧海醫心

发布时间:2026-02-07 22:49:59

|

678人浏览过

|

来源于php中文网

原创

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

本文介绍如何基于字典定义的权重,对 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)

输出:

UP简历
UP简历

基于AI技术的免费在线简历制作工具

下载
   id  pts  ast  reb  oth  tov  score
0   1   25    8    1    5    4   34.2
1   2   20   14    4    6    2   43.8
2   3    9    7    9    7    1   29.3

优势说明

  • 健壮对齐:.dot() 严格依据列名(而非位置)匹配权重,即使列顺序变动或存在无关列(如 id、oth)也不影响结果;
  • 零依赖循环:纯向量化运算,性能优于 apply() 或 map();
  • 高可维护性:权重集中管理在字典中,增删列或调整系数只需修改 score_dict;
  • 天然容错:若某列在 DataFrame 中缺失,.dot() 会报 KeyError,便于早期发现数据异常。

⚠️ 注意事项

  • 确保 score_dict 的键全部存在于 df.columns 中,否则会引发 KeyError;可预先校验:assert all(k in df.columns for k in score_dict);
  • 若需支持缺失列默认权重为 0,可改用 df.reindex(columns=list(score_dict.keys()), fill_value=0).dot(weights);
  • 避免直接对含非数值列(如字符串 ID)的整个 DataFrame 调用 .dot(),务必显式筛选目标数值列。

通过这一方法,你不仅能简洁实现加权评分逻辑,还能为后续接入配置文件(如 YAML/JSON 权重表)或动态策略引擎打下坚实基础。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

430

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

542

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

314

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

79

2025.09.10

Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

73

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

3

2026.01.31

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

424

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

213

2023.09.04

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

39

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.9万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号