gpt4 book ai didi

python - pandas 获得 groupby 的平均值

转载 作者:太空狗 更新时间:2023-10-29 20:55:42 24 4
gpt4 key购买 nike

我试图找到每个 user_id 的平均每月费用,但我只能获得每个用户的平均费用或每个用户的每月费用。

因为我按用户和月份分组,所以无法获得第二个分组依据(月份)的平均值,除非我将分组依据输出转换为其他内容。

这是我的 df:

     df = { 'id' : pd.Series([1,1,1,1,2,2,2,2]),
'cost' : pd.Series([10,20,30,40,50,60,70,80]),
'mth': pd.Series([3,3,4,5,3,4,4,5])}

cost id mth
0 10 1 3
1 20 1 3
2 30 1 4
3 40 1 5
4 50 2 3
5 60 2 4
6 70 2 4
7 80 2 5

我可以获得每月总和,但我想要每个 user_id 的月份平均值。

df.groupby(['id','mth'])['cost'].sum()

id mth
1 3 30
4 30
5 40
2 3 50
4 130
5 80

我想要这样的东西:

id average_monthly
1 (30+30+40)/3
2 (50+130+80)/3

最佳答案

重置索引应该有效。试试这个:

In [19]: df.groupby(['id', 'mth']).sum().reset_index().groupby('id').mean()  
Out[19]:
mth cost
id
1 4.0 33.333333
2 4.0 86.666667

如果需要,您可以只删除 mth。逻辑是,在 sum 部分之后,您有:

In [20]: df.groupby(['id', 'mth']).sum()
Out[20]:
cost
id mth
1 3 30
4 30
5 40
2 3 50
4 130
5 80

此时重置索引将为您提供独特的月份。

In [21]: df.groupby(['id', 'mth']).sum().reset_index()
Out[21]:
id mth cost
0 1 3 30
1 1 4 30
2 1 5 40
3 2 3 50
4 2 4 130
5 2 5 80

只是再次对其进行分组,这次使用mean 而不是sum。这应该会给你平均值。

如果这有帮助,请告诉我们。

关于python - pandas 获得 groupby 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066837/

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