2014-01-29 32 views
13

pandas hat die Unterstützung für Multi-Level-Spaltennamen:Pandas: Mehrstufige Spaltennamen

>>> x = pd.DataFrame({'instance':['first','first','first'],'foo':['a','b','c'],'bar':rand(3)}) 
>>> x = x.set_index(['instance','foo']).transpose() 
>>> x.columns 
MultiIndex 
[(u'first', u'a'), (u'first', u'b'), (u'first', u'c')] 
>>> x 
instance  first      
foo    a   b   c 
bar  0.102885 0.937838 0.907467 

Diese Funktion ist sehr nützlich, da es mehrere Versionen des gleichen Datenrahmen erlaubt ‚horizontal‘ mit der ersten Ebene angehängt werden von die Spaltennamen (in meinem Beispiel instance) unterscheiden die Instanzen.

Stellen Sie sich ein Datenrahmen wie diese habe ich schon:

    a   b   c 
bar  0.102885 0.937838 0.907467 

Gibt es eine schöne Möglichkeit, eine andere Ebene zu den Spaltennamen, ähnlich wie dies für Zeilenindex hinzufügen:

x['instance'] = 'first' 
x.set_level('instance',append=True) 
+2

Ich denke nicht * es gibt, aber es sollte definitiv sein. Ich denke, es gibt eine Feature-Anfrage für diese auf GitHub ... –

+1

Obwohl es einige interessante Fragen aufwirft, wie "Wie wähle ich eine bestimmte Spalte, wenn es zwei Ebenen der Spaltenbenennung gibt?". – LondonRob

+2

x ['zuerst'], x [(erste ',' a ') oder x.xs (' a ', Achse = 1, Ebene = 1)? : s –

Antwort

19

Try this :

df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6]}) 

columns=[('c','a'),('c','b')] 

df.columns=pd.MultiIndex.from_tuples(columns) 
+0

Jemand könnte diese Antwort von Romain [hier] (https: // stackoverflow .com/a/40225796/8508004), um etwas Ähnliches zu tun, aber ohne die Tupel, da alle dasselbe Level hinzugefügt wurde. – Wayne

Verwandte Themen