如何用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
相关产品推荐
相关产品推荐

