Pandas如何汇总多个列

时间:2017-08-31 08:41:34

标签: python pandas

以下是摘录:

test = pd.DataFrame({'userid': [1,1,1,2,2], 'order_id': [1,2,3,4,5], 'fee': [2,1,5,3,1]})

我想基于用户ID进行分组并计算“order_id”#39;列和总和费用'柱:

test.groupby('userid').order_id.count()
test.groupby('userid').fee.sum()

是否可以在一行代码中执行这两个操作,以便我可以得到一个结果df如下所示:

userid    counts    sum
...

我尝试过pivot_table:

test.pivot_table(index='userid', values=['order_id', 'fee'], aggfunc=[np.size, np.sum])

它提供了这样的东西:

       size             sum
       fee  order_id    fee order_id
userid              
1       3      3          8 6
2       2      2          4 9

是否可以告诉pandas使用np.size& np.sum在一列而不是两列?

1 个答案:

答案 0 :(得分:3)

DataFrameGroupBy.aggrename列一起使用:

d = {'order_id':'counts','fee':'sum'}
df = test.groupby('userid').agg({'order_id':'count', 'fee':'sum'})
         .rename(columns=d)
         .reset_index()
print (df)
   userid  sum  counts
0       1    8       3
1       2    4       2

但更好的是按size汇总,因为如果需要排除NaN s,则使用count

df = test.groupby('userid')
         .agg({'order_id':'size', 'fee':'sum'})
         .rename(columns=d).reset_index()
print (df)
   userid  sum  counts
0       1    8       3
1       2    4       2