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

Python Pandas:同时在不同列上进行均值和总和分组

如何解决Python Pandas:同时在不同列上进行均值和总和分组

您需要aggdictionary然后按rename名称

d = {'Missed':'Sum1', 'Credit':'Sum2','Grade':'Average'}
df=df.groupby('Name').agg({'Missed':'sum', 'Credit':'sum','Grade':'mean'}).rename(columns=d)
print (df)
      Sum1  Sum2  Average
Name                     
A        2     4       11
B        3     5       15

如果还想从创建列Name

df = (df.groupby('Name', as_index=False)
       .agg({'Missed':'sum', 'Credit':'sum','Grade':'mean'})
       .rename(columns={'Missed':'Sum1', 'Credit':'Sum2','Grade':'Average'}))
print (df)
  Name  Sum1  Sum2  Average
0    A     2     4       11
1    B     3     5       15

具有命名聚合的解决方案:

df = df.groupby('Name', as_index=False).agg(Sum1=('Missed','sum'), 
                                            Sum2= ('Credit','sum'),
                                            Average=('Grade','mean'))
print (df)
  Name  Sum1  Sum2  Average
0    A     2     4       11
1    B     3     5       15

解决方法

我有一个pandas数据框,如下所示:

Name    Missed    Credit    Grade
A       1         3         10
A       1         1         12      
B       2         3         10
B       1         2         20

我想要的输出是:

Name    Sum1   Sum2    Average
A       2      4      11
B       3      5      15

基本上得到列的总和Credit,并Missed要做到平均上Grade。我现在正在做的是两个groupby
Name,然后求和和求平均值,最后合并两个输出数据帧,这似乎并不是最好的方法。我在SO上也发现了这一点,如果我只想在一列上工作,这很有意义:

df.groupby('Name')['Credit'].agg(['sum','average'])

但是不确定如何为两根色谱柱做一个衬管吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。