Python pandas:同时在不同列上的mean和sum groupby

时间:2018-02-21 15:03:17

标签: python pandas

我有一个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,然后得到sum和average,最后合并两个输出数据帧,这似乎不是最好的方法。我也在SO上找到了这个,如果我只想在一个列上工作那么有意义:

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

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

2 个答案:

答案 0 :(得分:13)

您需要dictionary 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 创建列:

{{1}}

答案 1 :(得分:1)

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'})