pandas 得到一群人的平均数 [英] pandas get average of a groupby
问题描述
我试图找到每个user_id的平均每月费用,但我只能够获得每个用户的平均费用或每个用户的每月费用。
因为我按用户和月份分组,所以除非我通过将输出转换成别的东西,否则无法获得第二个组的平均值(月)。 p>
这是我的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])}
费用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的月份。
$ b $ $ p $ 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
重置索引应该可行。试试这个:
在[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
部分之后,你有这样的结构:
在[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
在这一刻重设指数会给你独特的月份。
在[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
而不是总和
。这应该给你平均值。
让我们知道这是否有帮助。
I am trying to find the average monthly cost per user_id but i am only able to get average cost per user or monthly cost per user.
Because i group by user and month, there is no way to get the average of the second groupby (month) unless i transform the groupby output to something else.
This is my 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
I can get monthly sum but i want the average of the months for each user_id.
df.groupby(['id','mth'])['cost'].sum()
id mth
1 3 30
4 30
5 40
2 3 50
4 130
5 80
i want something like this:
id average_monthly
1 (30+30+40)/3
2 (50+130+80)/3
Resetting the index should work. Try this:
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
You can just drop mth
if you want. The logic is that after the sum
part, you have this:
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
Resetting the index at this point will give you unique months.
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
It's just a matter of grouping it again, this time using mean
instead of sum
. This should give you the averages.
Let us know if this helps.
这篇关于 pandas 得到一群人的平均数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!