微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandas获得分组平均

如何解决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 举报,一经查实,本站将立刻删除。