2016-10-10 7 views
1

Ich habe folgende Rohdaten in einem Datenrahmen:Berechnung von Zwischensummen in Pandas pivot_table mit Multiindex

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 

Ich möchte einige Zusammenfassung der Daten tun, um zu sehen, wie viel jeder Makler an jedem Ort geschickt, so dass ich erstellt ein pivot_table:

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

Ergebnis, wie erwartet:

    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 

ich möchte auch, wie viel war se zu jedem Broker insgesamt. und zeige es in derselben Tabelle. Ich kann diese Information erhalten, indem ich df.groupby('BROKER').sum() eintippe, aber wie kann ich dieses meiner Pivot-Tabelle als eine Spalte hinzufügen, die heißt, sagen wir, BROKER_TOTAL?

Hinweis: Diese Frage ist ähnlich, aber scheint auf einer älteren Version zu sein, und meine beste Vermutung, es zu meiner Situation anzupassen hat nicht funktioniert: Pandas Pivot tables row subtotals

Antwort

1

Sie MultiIndex.from_arrays für df1 erstellen können, concat es pt und zuletzt 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