2016-05-11 19 views
0

folgenden Pivot-Tabelle Gegeben:Pandas Pivot-Tabelle Balkendiagramm Erhaltung Hierarchie

df=pd.DataFrame({'A':['a','a','a','a','a','b','b','b','b'], 
       'B':['x','y','z','x','y','z','x','y','z'], 
       'C':['a','b','a','b','a','b','a','b','a'], 
       'D':[7,5,3,4,1,6,5,3,1]}) 
table = pd.pivot_table(df, index=['A', 'B','C'],aggfunc='sum') 
table 

      D 
A B C 
a x a 7 
     b 4 
    y a 1 
     b 5 
    z a 3 
b x a 5 
    y b 3 
    z a 1 
     b 6 

Ich möchte eine horizontale Balkendiagramm erstellen, die die hierarchische Anordnung der Indizes bewahrt.

Derzeit, wenn ich dies tun:

%matplotlib inline 
a=table.plot(kind='barh') 
a.show() 

ich dieses:

enter image description here

Aber was ich wirklich will, so etwas wie dieses:

enter image description here

Antwort

1

Nun, es bewahrt die Hierarchie, aber es ist nicht e Xactly, was Sie haben, wie Sie die gewünschte Diagramm dargestellt:

orig_index = table.index 

idx = (a.apply(lambda row: '{} {} {}'.format(
        row['a'] if a.shift(1).ix[row.name, 'a'] != row['a'] else ' ', 
        row['b'] if a.shift(1).ix[row.name, 'b'] != row['b'] else ' ', 
        row['c']), axis=1) 
) 

table.index = idx[::-1] 

table.plot.barh() 

enter image description here

+0

Ich glaube, ich kann diese verwenden, wenn ich einen weiteren Schritt nehmen; wenn ich jeden Eintrag in Indexebene 2 isolieren kann (mit table.index.levels [2] gibt eindeutige Werte, aber ich brauche alle Werte in der Reihenfolge der Darstellung in der Pivot-Tabelle), und dasselbe für andere Ebenen tun, bin ich Ich denke, ich kann sie dann in einer Tabelle a la plt.table() minus ein paar Zeilen plotten. –

+0

Ich habe eine verwandte Frage zu diesem Effekt hier veröffentlicht: http://stackoverflow.com/questions/37190938/pandas-get-all-values-from-multiindex-level-2 –

Verwandte Themen