我正在尝试生成pandas pivot表,该表计算一系列数据列中的值的平均值,这些值由固定权重列中的值加权,我正在努力找到一种优雅而高效的方法来实现这一点
df = pd.DataFrame([['A',10,1],['A',20,0],['B',10,1],['B',0,0]],columns=['Group','wt','val'])
Group wt val
0 A 10 1
1 A 20 0
2 B 10 1
3 B 0 0
我想一组一组地返回一个新的权重(df.wt的和——easy peasy)和一个由df.wt加权的df.val的平均值,从而得出以下结果:
Group weight val
0 A 30 0.333
1 B 10 1.000
在实际应用程序中,有大量的val列和一个weight列,以及我希望应用不同aggfuncs的其他列。所以,虽然我意识到我可以通过直接应用groupby来实现这一点,但它更为混乱。有没有办法在pivot_表中滚动我自己的aggfunc,从而计算加权平均值
下面是一种使用
groupby
的方法:输出:
更新:对于所有类似
val
的列:输出:
这适用于多个数字列:
创建一个使用numpy average的函数,并包含权重。
对groupby中的组运行列表理解,并应用该函数
连接输出
相关问题 更多 >
编程相关推荐