在 Python 中使用 groupby 计算加权平均值

Calculate the weighted average using groupby in Python

这是我目前正在处理的数据框:

df_weight_0

我想计算的是变量“avg_lag”在每个 product_basket 中由“tot_SKU”加权的 SMB 和 CORP 组的平均值。 这意味着,以 CORP 为例,我想计算一些东西:

(585,134 * 46.09 + 147,398 * 104.55 + ... + 1,112,941 * 75.73) / (585,134 + 147,398 + ... + 1,112,941)

SMB 也需要做同样的事情。

理想情况下,我希望将这两个数字放在上面数据框中的新列中(SMB 和 CORP 行将根据如上所示计算的两个值重复加权平均值)。

P.S。我将在更多层次上进行更深入的分析,因此方法越通用越好。

提前致谢,

斯特凡诺

所以我认为这应该可以解决问题

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')

编辑:添加了请求的与旧数据框的合并