gpt4 book ai didi

python - 来自 groupby 平均值的 Pandas 新列

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:54 25 4
gpt4 key购买 nike

我有一个数据框

>>> df = pd.DataFrame({'a':[1,1,1,2,2,2],
... 'b':[10,20,20,10,20,20],
... 'result':[100,200,300,400,500,600]})
...
>>> df
a b result
0 1 10 100
1 1 20 200
2 1 20 300
3 2 10 400
4 2 20 500
5 2 20 600

并希望创建一个新列,该列是“a”和“b”对应值的平均结果。我可以通过 groupby 获取这些值:

>>> df.groupby(['a','b'])['result'].mean()
a b
1 10 100
20 250
2 10 400
20 550
Name: result, dtype: int64

但不知道如何将其转换为原始 DataFrame 中的新列。最终结果应该是这样的,

>>> df
a b result avg_result
0 1 10 100 100
1 1 20 200 250
2 1 20 300 250
3 2 10 400 400
4 2 20 500 550
5 2 20 600 550

我可以通过遍历“a”和“b”的组合来做到这一点,但对于更大的数据集来说,这会变得非常缓慢和笨拙。可能有更简单、更快捷的方法。

最佳答案

你需要transform :

df['avg_result'] = df.groupby(['a', 'b'])['result'].transform('mean')

这会为您生成正确索引的 groupby 值列:

   a   b  result  avg_result
0 1 10 100 100
1 1 20 200 250
2 1 20 300 250
3 2 10 400 400
4 2 20 500 550
5 2 20 600 550

关于python - 来自 groupby 平均值的 Pandas 新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445009/

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