gpt4 book ai didi

python - 如何在 Pandas 中使用 group_by 函数计算加权平均值

转载 作者:行者123 更新时间:2023-12-04 01:03:50 25 4
gpt4 key购买 nike

我有一个示例数据框,如下所示 (4*43)。我想按 “id” 分组,然后按“length”计算每列 (0,1,2,...40) 的加权平均值。我应该如何将 group_by 与加权平均计算相结合?

id length 0    1      2    3 ....   40
1 10 0.1 0.02 0.7 0.1 .. 0.4
1 5 0.2 0.01 0.1 0.4 ... 0.1
3 6 0.1 0.05. 0.2 0.5 ... 0.05
3 5 0.5 0.7 0.6 0.5 ... 0.8

我尝试使用如下所示的 group by 函数来获取分组平均值,但它失败了。

df.groupby("id", as_index=True).mean().iloc[3:43]

理想输出:

   id  weighted_0    weighted_1      weighted_2  ....   weighted_40
1
3

最佳答案

不使用 apply 的另一个选项(出于性能原因通常不推荐,请参见下面的时序示例):

(df.iloc[:, 2:]
.multiply(df['length'], axis=0)
.divide(df.groupby('id')['length'].transform('sum'), axis=0)
.groupby(df['id'])
.sum()
.add_prefix('weighted_'))

输出:

    weighted_0  weighted_1  weighted_2  weighted_3  weighted_40
id
1 0.133333 0.016667 0.500000 0.2 0.300000
3 0.281818 0.345455 0.381818 0.5 0.390909

例如,对具有 5K 个唯一 id 的 10K 行数据集进行计时:

%timeit f_this_answer(df)
2.87 ms ± 18.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit f_with_apply(df)
2.04 s ± 5.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

与 Jérôme Richard 使用 apply 的答案的执行时间相比,这个答案的运行时间为 3 毫秒(大约提高了 700 倍)

关于python - 如何在 Pandas 中使用 group_by 函数计算加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67186336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com