2016-05-12 27 views
2

die folgenden Pivot-Tabelle Gegeben:Pandas Jetzt alle Werte von Multiindex Ebenen

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 mag würde jeden Wert von ‚C‘ für den Zugriff auf (Ebene 2) als eine Liste für das Plotten zu verwenden. Ich möchte das gleiche für 'A' und 'B' (Level 0 und 1) so machen, dass der Abstand beibehalten wird, damit ich auch diese Listen verwenden kann. Ich versuche, schließlich zu verwenden, um sie so etwas wie diese über Plotten zu erstellen: What I'm ultimately trying to plot

Here's the question from which this one stemmed.

Vielen Dank im Voraus!

+0

Sorry sind Sie fragen nach 'table.index.get_level_values ​​(2)' oder 'table.index. get_level_values ​​('C') 'wenn Sie bevorzugen? – EdChum

+0

Das war's! Kannst du als Antwort posten? –

Antwort

2

Sie get_level_values können die Indexwerte auf einer bestimmten Ebene aus einem Multi-Index zu erhalten:

In [127]: 
table.index.get_level_values('C') 

Out[127]: 
Index(['a', 'b', 'a', 'b', 'a', 'a', 'b', 'a', 'b'], dtype='object', name='C') 

In [128]:  
table.index.get_level_values('B') 

Out[128]: 
Index(['x', 'x', 'y', 'y', 'z', 'x', 'y', 'z', 'z'], dtype='object', name='B') 

In [129]: 
table.index.get_level_values('A') 

Out[129]: 
Index(['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'], dtype='object', name='A') 

get_level_values nimmt einen int param für die Ebene oder ein Etikett

Beachten Sie, dass für die höhere Ebenen, die Werte werden wiederholt, um mit der Indexlänge auf der niedrigsten Ebene zu entsprechen, für Anzeigezwecke sehen Sie dies nicht

+0

Nur um Zuckerglasur hinzuzufügen, können Sie demonstrieren, wie Sie alle Werte von Level 'A' durch '' Speichern für den mittleren Wert (oder oberen mittleren Wert für gerade Zählungen, wie den zweiten Wert von oben in diesem Fall) ersetzen der "b" -Werte in der Ebene "A")? –

+0

Entschuldigung, ich verstehe nicht, fragen Sie, wie man die Werte komprimiert, so dass sie sich zum Beispiel für eine gegebene Stufe nicht wiederholen? – EdChum

+0

Ich möchte nur alle Werte durch Leerzeichen ersetzen, außer den mittleren für Level 'A' (0), so dass, wenn ich sie als sekundäre und tertiäre Achsenbeschriftungen hinzufügen (Ich werde eine Frage stellen, wie das in Kürze geht), Sie werden wie in meinem Beispieldiagramm angezeigt. Ich möchte auch etwas ähnliches mit Level 'B' (1) machen, um den Abstand zu erhalten. –