使用pandas进行聚合和分组索引

时间:2018-02-05 19:23:09

标签: pandas

我有一个这样的数据框:

User ID Year    Amount
A       2009    5
A       2010    6
A       2009    6
A       2010    1
B       2010    1
B       2009    1
B       2010    2
B       2010    5

我想总结每年用户的金额..并希望得到这样的结果:

    Sum of amount   
User    2009    2010

  A        11   7
  B        1    8

我只能处理这一年。像这样:

newdf= df.groupby('User ID')['Amount'].sum().reset_index()

2 个答案:

答案 0 :(得分:2)

IIUC pivot_table

pd.pivot_table(df,index=['UserID'],columns=['Year'],values=['Amount'],aggfunc='sum')
Out[906]: 
       Amount     
Year     2009 2010
UserID            
A          11    7
B           1    8

答案 1 :(得分:2)

rename用于MultiIndex的新级别,然后将列Year添加到groupbyunstack。最后删除列名称添加rename_axis

newdf = (df.rename(columns={'Amount':'Sum of amount'})
         .groupby(['User ID', 'Year'])
         .sum()
         .unstack()
         .rename_axis((None, None), axis=1))
print (newdf)

        Sum of amount     
                 2009 2010
User ID                   
A                  11    7
B                   1    8

但如果没有必要重命名列,解决方案就是简化:

newdf= df.groupby(['User ID', 'Year']).sum().unstack()
print (newdf)
        Amount     
Year      2009 2010
User ID            
A           11    7
B            1    8