2016-10-10 7 views
1

でpivot_table私は、以下の生のデータを持つデータフレームに:計算小計はマルチインデックス

BROKER VENUE QUANTITY 
0 BrokerA Venue_1  300 
1 BrokerA Venue_2  400 
2 BrokerA Venue_2  1400 
3 BrokerA Venue_3  800 
4 BrokerB Venue_2  500 
5 BrokerB Venue_3  1100 
6 BrokerC Venue_1  1000 
7 BrokerC Venue_1  1200 
8 BrokerC Venue_2  17000 

私は、各ブローカーは、各会場に送られたどのくらい見るためにデータの一部要約をしたいので、私作成pivot_table:

pt = df.pivot_table(index=['BROKER', 'VENUE'], values=['QUANTITY'], aggfunc=np.sum) 

結果、予想通り:

    QUANTITY 
BROKER VENUE    
BrokerA Venue_1  300.0 
     Venue_2 1800.0 
     Venue_3  800.0 
BrokerB Venue_2  500.0 
     Venue_3 1100.0 
BrokerC Venue_1 2200.0 
     Venue_2 17000.0 

私はまた、SEだっどのくらいしたいです各ブローカー全体に適用されます。この同じ表にそれを示してください。 df.groupby('BROKER').sum()と入力してその情報を取得できますが、これをBROKER_TOTALという名前の列としてピボットテーブルに追加するにはどうすればよいですか?

注:この質問は似ていますが、古いバージョンであるように思われ、私の状況にそれを適応さで私の最高の推測では動作しませんでした:Pandas Pivot tables row subtotals

答えて

1

あなたはそれがptdf1ためMultiIndex.from_arraysconcatを作成することができます最後にsort_index

df1 = df.groupby('BROKER').sum() 
df1.index = pd.MultiIndex.from_arrays([df1.index + '_total', len(df1.index) * ['']]) 
print (df1) 
       QUANTITY 
BrokerA_total  2900 
BrokerB_total  1600 
BrokerC_total  19200 

print (pd.concat([pt, df1]).sort_index()) 
         QUANTITY 
BROKER  VENUE    
BrokerA  Venue_1  300 
       Venue_2  1800 
       Venue_3  800 
BrokerA_total    2900 
BrokerB  Venue_2  500 
       Venue_3  1100 
BrokerB_total    1600 
BrokerC  Venue_1  2200 
       Venue_2  17000 
BrokerC_total    19200