2017-08-31 219 views
1

下面是摘錄:大熊貓如何聚合多個列

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」列,總結了「費用」列:

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 

是否可以告訴熊貓使用np.size & np.sum在一列而不是兩個?

回答

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骨料,由於使用count如果需要排除NaN S:

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