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

为分组生成存储加权平均值的独立列报错求助

问题修复:按分组计算加权平均值并生成新列

你的代码报错核心原因是分组时只选取了score列,导致lambda函数里的x只是score的Series,无法访问score和manager_weight这两个列(它们不在当前分组对象中)。下面是两种可行的修复方案:

方案一:用transform直接生成列(推荐)

分组时同时包含score和manager_weight两列,确保lambda能获取到计算所需的全部数据:

import numpy as np
import pandas as pd

df['w_mean_m'] = df.groupby('person')[['score', 'manager_weight']].transform(
    lambda x: np.average(x['score'], weights=x['manager_weight'])
)

方案二:先计算均值再合并到原表

如果觉得transform的逻辑不够直观,可以先单独计算每个分组的加权均值,再通过merge合并回原DataFrame:

# 计算每个person的加权均值
w_mean_df = df.groupby('person').apply(
    lambda x: np.average(x['score'], weights=x['manager_weight'])
).reset_index(name='w_mean_m')

# 合并到原表
df = df.merge(w_mean_df, on='person', how='left')

额外注意事项

  • 确保manager_weight列没有缺失值或非数值类型,否则np.average会报错。可以提前用df = df.dropna(subset=['manager_weight'])清理数据,或者用weights=np.nan_to_num(x['manager_weight'])做兼容处理。
  • np.average不需要权重和为1,它会自动按权重比例计算加权平均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:55:25