2016-12-18 161 views
2

我想要一個下表的彙總行。結果將是會員ID的唯一計數,收據總額和支出總和。但我能想到的唯一方法是創建一個具有相同值的新列,並使用相同的值列來執行groupby集合函數以獲得結果。有一種更簡單的方法嗎?彙總行或數據框

import pandas as pd 
df=pd.DataFrame({'Mbr ID':['ID0001','ID0002','ID0003','ID0004'], 
       'Receipts':[3,5,12,5],     
       'Spending':[130,22,313,46], 
       }) 

enter image description here

+0

類似'df ['Mbr ID']。nunique(),df.Rece ipts.sum(),df.Spending.sum()'? – Zero

回答

2

您需要通過locMbr IDnunique和列ReceiptsSpendingsum添加新摘要行:

df.loc['Summary'] = [df['Mbr ID'].nunique(), df.Receipts.sum(), df.Spending.sum()] 
print (df) 
     Mbr ID Receipts Spending 
0  ID0001   3  130 
1  ID0002   5  22 
2  ID0003  12  313 
3  ID0004   5  46 
Summary  4  25  511 

如果需要新的行同前一個增量的index按1:

df.loc[df.index[-1] + 1] = [df['Mbr ID'].nunique(), df.Receipts.sum(), df.Spending.sum()] 
print (df) 
    Mbr ID Receipts Spending 
0 ID0001   3  130 
1 ID0002   5  22 
2 ID0003  12  313 
3 ID0004   5  46 
4  4  25  511 
0

只是這樣做。

df.groupby('Mbr ID').agg({ 
     'Mbr ID': 'count', 
     'Receipts': 'sum', 
     'Spending': 'sum'}) 

#   Mbr ID Spending Receipts 
# Mbr ID        
# ID0001  1  130   3 
# ID0002  1  22   5 
# ID0003  1  313  12 
# ID0004  1  46   5