2017-05-31 2 views
2

Ich habe folgenden Datenrahmen (liest aus einer CSV-Datei kann ich nicht ändern):Konvertieren Spalten mit zwei Teilen in Multiindex

df = pd.DataFrame([['low', 0.5, 123, 0.8, 123], 
        ['high', 0.7, 253, 0.9, 147]], 
        columns=['type', 'g1 v0', 'g1 v1', 'g2 v0', 'g2 v1']) 

Ich mag die Spalten „split“ g1 v0, g1 v1 usw. in einem Multiindex, z wie:

    g1   g2 
      v0  v1  v0  v1 
    type  
0 low 0.5 123 0.8 123 
1 high 0.7 253 0.9 147 

Grundsätzlich möchte ich die gx/vy Teil der Spaltennamen setzen in zwei getrennte Ebenen werden.

Antwort

4

Verwenden set_index + split:

df = df.set_index('type') 
df.columns = df.columns.str.split(expand=True) 
print (df) 
     g1  g2  
     v0 v1 v0 v1 
type      
low 0.5 123 0.8 123 
high 0.7 253 0.9 147 

Eine andere Lösung mit drop, split und concat:

df1 = df.drop('type', axis=1) 
df1.columns = df1.columns.str.split(expand=True) 
print (df1) 
    g1  g2  
    v0 v1 v0 v1 
0 0.5 123 0.8 123 
1 0.7 253 0.9 147 

df = pd.concat([df['type'].rename(('','type')), df1], axis=1) 
print (df) 
     g1  g2  
    type v0 v1 v0 v1 
0 low 0.5 123 0.8 123 
1 high 0.7 253 0.9 147 
+1

Ich kann nicht auf diese Antwort verbessern! – piRSquared

+0

Die 'set_index' +' split' Methode ist genau das was ich gesucht habe, danke! – Holt

+0

Froh kann dir helfen! Viel Glück! – jezrael

Verwandte Themen