[英]Calculate the weighted average using groupby in Python
这是我目前正在研究的 dataframe:
df_weight_0
我想计算的是 SMB 和 CORP 组的每个 product_basket 中由“tot_SKU”加权的变量“avg_lag”的平均值。 这意味着,以 CORP 为例,我想计算如下:
(585,134 * 46.09 + 147,398 * 104.55 +... + 1,112,941 * 75.73) / (585,134 + 147,398 +... + 1,112,941)
SMB 也需要这样做。
理想情况下,我希望将上面 dataframe 中的这两个数字放在一个新列中(SMB 和 CORP 行将根据如上所示计算的两个值重复其加权平均值)。
PS 我将在我的分析中更深入地了解 go,因此最通用的方法越好。
提前致谢,
斯特凡诺
所以这应该可以解决我认为的问题
import pandas as pd
def calculator(df, columns):
weighted_sum = (df[columns[0]]*df[columns[1]]).sum()/df[columns[0]].sum()
return weighted_sum
cols = ['tot_SKU', 'avg_lag']
Sums = df.groupby('SF_type').apply(lambda x: calculator(x, cols))
df.join(Sums.rename(('sums')), on='SF_type')
编辑:添加了与旧 dataframe 的请求合并
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.