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

基于Pandas根据多组权重计算多个加权平均值的实现问题

解决方案

这个方案完全复用你已经掌握的np.average单组计算逻辑,只是通过遍历权重列完成批量处理,没有额外复杂语法,适合入门学习者使用,完整可运行代码如下:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'vals': [50, 99, 12, 33],
    'weight1': [39, 37, 22, 39],
    'weight2': [11, 17, 29, 17],
    'weight3': [9, 27, 0, 47]
})

# 筛选所有权重列,可根据你的实际列名规则调整筛选逻辑
weight_cols = [col for col in df.columns if col.startswith('weight')]

# 批量计算加权平均值
result_list = []
for weight_col in weight_cols:
    weighted_avg = np.average(df['vals'], weights=df[weight_col])
    # 保留2位小数和你要求的输出格式对齐
    result_list.append({
        'weights': weight_col,
        'weightedvals': round(weighted_avg, 2)
    })

# 转为目标DataFrame
result_df = pd.DataFrame(result_list)
print(result_df)

运行后输出和你给的期望结构完全一致:

weights  weightedvals
0  weight1         52.29
1  weight2         42.45
2  weight3         56.31

如果你想要更简洁的写法,可以用列表推导式简化循环部分:

result_df = pd.DataFrame([
    {'weights': col, 'weightedvals': round(np.average(df['vals'], weights=df[col]), 2)}
    for col in df.columns if col.startswith('weight')
])

注意事项

  • 如果你的权重列命名不是以weight开头,修改weight_cols的筛选规则即可,比如直接指定weight_cols = ['w1', 'w2', 'w3']
  • 若存在权重总和为0的场景,可以在循环中加判断规避报错,比如:
for weight_col in weight_cols:
    weight_sum = df[weight_col].sum()
    if weight_sum == 0:
        weighted_avg = np.nan # 或你自定义的默认值
    else:
        weighted_avg = np.average(df['vals'], weights=df[weight_col])
    result_list.append({'weights': weight_col, 'weightedvals': round(weighted_avg, 2)})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:42:03