You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中以列为权重计算列的加权和?

解决DataFrame列间sumproduct(加权和)的问题

问题原因

你之前的代码失败是因为pandas DataFrame的乘法操作会按列名对齐:state1/state2与pop1/pop2列名不匹配,相乘后所有元素变为NaN,求和时跳过NaN最终得到0。

可行解决方案

以下是几种高效实现方式:

方法1:直接使用数值数组运算(最直观)

通过.values或.to_numpy()获取DataFrame的数值矩阵,绕开列名对齐限制,逐元素相乘后按行求和:

import pandas as pd

df_data = pd.DataFrame.from_dict({'state1' : [1, 2, 3], 'state2' : [2, 4, 6], 'pop1' : [1, 1, 1], 'pop2' : [1, 1, 2]})
df_data['sumproduct'] = (df_data[['state1', 'state2']].values * df_data[['pop1', 'pop2']].values).sum(axis=1)

方法2:使用矩阵点积(效率最高)

利用dot方法计算每行state向量与pop向量的点积,本质就是加权和:

df_data['sumproduct'] = df_data[['state1', 'state2']].dot(df_data[['pop1', 'pop2']].T)

方法3:对齐列名后运算

重命名其中一组列名,让两组列名匹配后再相乘求和:

state_df = df_data[['state1', 'state2']]
pop_df = df_data[['pop1', 'pop2']].rename(columns={'pop1':'state1', 'pop2':'state2'})
df_data['sumproduct'] = (state_df * pop_df).sum(axis=1)

方法4:逐行自定义计算(适合小数据集)

用apply逐行执行加权和计算,缺点是大数据下效率较低:

df_data['sumproduct'] = df_data.apply(lambda x: x['state1']*x['pop1'] + x['state2']*x['pop2'], axis=1)

最终结果

执行任意一种方法后,df_data都会生成你需要的sumproduct列:

state1  state2  pop1  pop2  sumproduct
0       1       2     1     1           3
1       2       4     1     1           6
2       3       6     1     2          15

内容的提问来源于stack exchange,提问作者Faraz Masroor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:31:16