我正在尝试计算某些用户群组的加权平均值,但似乎无法获取输出并用它形成一个新列。
我试过 groupby 和 apply 函数,但似乎无法将其转换回新列
df = pd.DataFrame('cohort_size': [10,15,20,25,20,15],
'retention' : [0.3,0.2,0.4,0.5,0.6,0.5],
'nth_interval' : [1,1,1,7,7,7])
df.groupby('nth_interval').apply(lambda x: np.average(x['retention'], weights=x['cohort_size']))
我得到的是一个系列的输出,但我真正想要的是取这些单独的加权平均值并将它们作为数据框中的新列放回,其中每个列值对应于第 nth_interval
IIUC,你在找这个吗?
df.merge(df.groupby('nth_interval').apply(lambda x: np.average(x['retention'],
weights=x['cohort_size']))
.rename('wgted_avg').reset_index(),
on='nth_interval')
输出:
cohort_size retention nth_interval wgted_avg
0 10 0.3 1 0.311111
1 15 0.2 1 0.311111
2 20 0.4 1 0.311111
3 25 0.5 7 0.533333
4 20 0.6 7 0.533333
5 15 0.5 7 0.533333
我是一名优秀的程序员,十分优秀!