以下是摘录:
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在一列而不是两列?
答案 0 :(得分:3)
将DataFrameGroupBy.agg
与rename
列一起使用:
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