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

如何用Pandas从两个DataFrame计算加权平均值并追加至原表?

Pandas实现产品分组加权平均值计算

我有两个DataFrame:df1存储各产品在不同分组下的数值,df2存储各分组对应的权重数据。需要计算每个产品的加权平均值,并将该列追加至df1中。此前已在Excel中实现,现在用Pandas完成。

数据定义

import pandas as pd

# 初始化df1
df1 = pd.DataFrame({
    'product': ['xyz', 'abc', 'pqr'],
    'group1': [223056, 557042, 951348],
    'group2': [907858, 382306, 723503],
    'group3': [4803, 915624, 587397],
    'group4': [586623, 786236, 141975],
    'group5': [835423, 413817, 567826]
}).set_index('product')

# 初始化df2
df2 = pd.DataFrame({
    'group': ['group1', 'group2', 'group3', 'group4', 'group5'],
    'weight': [0.5, 7.5, 10, 1.5, 50]
}).set_index('group')

实现步骤

  • 提取df2的权重序列,确保与df1的分组列完全匹配
  • 对每个产品的分组数值与对应权重相乘后求和,再除以权重总和得到加权平均值
  • 将计算结果作为新列追加到df1中

计算代码

# 对齐权重与df1的分组列
weights = df2['weight'].reindex(df1.columns)

# 计算加权平均值并添加新列
df1['weighted-average'] = (df1 * weights).sum(axis=1) / weights.sum()

# 按示例要求取整
df1['weighted-average'] = df1['weighted-average'].round().astype(int)

最终结果

group1  group2  group3  group4  group5  weighted-average
product                                                         
xyz      223056  907858    4803  586623  835423                40
abc      557042  382306  915624  786236  413817                25
pqr      951348  723503  587397  141975  567826                30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:11:39