【问题标题】:Python pandas: mean and sum groupby on different columns at the same timePython pandas:同时在不同列上平均和求和groupby
【发布时间】:2018-08-01 05:21:09
【问题描述】:

我有一个如下所示的 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   

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

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

但不确定如何为两列做单行?

【问题讨论】:

标签: python pandas


【解决方案1】:

您需要 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

【讨论】:

  • 在最后一条命令中,是否可以添加自定义功能?
  • @Basile - 当然,使用 Average=('Grade','mean') 例如Average=('Grade','my _function') 然后def my_function(x): return x.cumsum().mean()Average=('Grade',lambda x: x.cumsum().mean())
【解决方案2】:
A = pd.DataFrame.from_dict({'Name':['A','A','B','B'],'Missed':[1,1,2,1],'Credit':[3,1,3,2],'Grades':[10,12,10,20]})

A.groupby('Name').agg({'Missed':'sum','Credit':'sum','Grades':'mean'})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2020-07-04
    • 1970-01-01
    相关资源
    最近更新 更多