【问题标题】:Calculate the weighted average using groupby in Python在 Python 中使用 groupby 计算加权平均值
【发布时间】:2021-06-14 15:46:12
【问题描述】:

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

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 也需要这样做。

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

附:我将在我的分析中更深入地进行更多层次的分析,因此最通用的方法越好。

提前致谢,

斯特凡诺

【问题讨论】:

  • 您是否会将您的数据框包含为可复制的文本块? df.to_dict()df.head(18).to_dict() 这样我们就不需要手动转录这张图片中的数据了?

标签: python pandas dataframe average weighted-average


【解决方案1】:

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

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

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

【讨论】:

  • 嘿苹果酒。首先非常感谢您的回答。我已经根据我的 df 调整了公式,我得到了这个错误。你知道是怎么回事吗? TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32') 编辑:我明白了,可能是因为我在格式化 SKU 列之前我得到任何结果,而不是最终做到这一点
  • stackoverflow.com/questions/42013903/… 描述我认为的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2019-12-30
  • 2011-02-12
  • 2016-12-14
  • 2021-11-21
  • 2017-04-22
相关资源
最近更新 更多