为分组生成存储加权平均值的独立列报错求助
问题修复:按分组计算加权平均值并生成新列
你的代码报错核心原因是分组时只选取了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
相关产品推荐
相关产品推荐

