如何解决Pandas获得分组平均
重置索引应该可以。尝试这个:
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
。这应该给您平均值。
让我们知道是否有帮助。
解决方法
我试图找到每个user_id的平均每月费用,但是我只能获取每个用户的平均费用或每个用户的每月费用。
因为我按用户和月份分组,否则除非我将groupby输出转换为其他值,否则无法获取第二个groupby(月份)的平均值。
这是我的df:
df = { 'id' : pd.Series([1,1,2,2]),'cost' : pd.Series([10,20,30,40,50,60,70,80]),'mth': pd.Series([3,3,4,5,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。