2017-02-04 21 views
2

Ich habe einige Schwierigkeiten bei der Organisation meines Datenrahmens. Ich denke, es ist ziemlich einfach, aber ich habe zu lange mit diesem stecken geblieben:Pandas Dataframe - Multilevel-Index/Spalte

Dies ist df1:

 Output Energy, (Wh/h) Lights (Wh) Lights+Media (Wh) Total Usage (h) \ 
Hour                   
1      0.0   0.0    0.0    0.0 
2      0.0   0.0    0.0    0.0 
3      0.0   0.0    0.0    0.0 
4      0.0   0.0    0.0    0.0 
5      0.0   0.0    0.0    0.0 

Ich würde dies lieber für einfache Bedienung wird umgesetzt:

df2 =df1.T 

gibt mir:

Hour      1 2 3 4 
    Output Energy, (Wh/h) 0.0 0.0 0.0 0.0  
    Lights (Wh)   0.0 0.0 0.0 0.0  
    Lights+Media (Wh)  0.0 0.0 0.0 0.0  
    Total Usage (h)  0.0 0.0 0.0 0.0  
    Lights (h)    0.0 0.0 0.0 0.0 
    Light+Media (h)  0.0 0.0 0.0 0.0 

Aber letztlich, ich würde es so aussehen mag:

         Hour 
            1 2 3 4 
      Output Energy, (Wh/h) 0.0 0.0 0.0 0.0  
      Lights (Wh)   0.0 0.0 0.0 0.0  
CU-101 Lights+Media (Wh)  0.0 0.0 0.0 0.0  
      Total Usage (h)  0.0 0.0 0.0 0.0  
      Lights (h)    0.0 0.0 0.0 0.0 
      Light+Media (h)  0.0 0.0 0.0 0.0 

Ich habe versucht, die 'Cu-101' als mehrstufige Spalte hinzuzufügen, aber ohne Erfolg. Soll ich das vor oder nach der Umsetzung hinzufügen?

Verschieben auch die 'Stunde' - ich habe diese Spalte als Index, aber wie verschiebe ich es auf ein neues Level?

+0

Ich bin nicht sicher, ob Ihre Frage verstehen - do Sie müssen neue s hinzufügen tring auf die erste Ebene von 'MultiIndex'? Oder etwas fehlt? Kannst du mehr erklären, wenn die Antwort nicht das ist, was du willst? – jezrael

Antwort

4

können Sie MultiIndex.from_arrays verwenden:

df.index = pd.MultiIndex.from_arrays([['Hour'] * len(df.index), 
             df.index], 
             names=(None,None)) 
df.columns = pd.MultiIndex.from_arrays([['CU-101'] * len(df.columns), 
             df.columns], 
             names=(None,None)) 

print (df.T) 
          Hour      
           1 2 3 4 5 
CU-101 Output Energy, (Wh/h) 0.0 0.0 0.0 0.0 0.0 
     Lights (Wh)   0.0 0.0 0.0 0.0 0.0 
     Lights+Media (Wh)  0.0 0.0 0.0 0.0 0.0 
     Total Usage (h)  0.0 0.0 0.0 0.0 0.0 
+0

@ ade1e - Danke. – jezrael

+0

Danke @jezrael. Wenn es möglich ist, diesen Multiindex durch csv mit 'df.to_csv' zu speichern? im Moment ist die 'Stunde' über jedem' 1', '2',' 3', gleich mit 'cu-101' – wazzahenry

+0

Es ist korrekt, bitte [docs] (http://pandas.pydata.org) /pandas-docs/stable/advanced.html#creating-a-multiindex-hierarchical-index-object) 'In [17]: df' und' In [21]: df'. Es ist der gleiche Datenrahmen, dort sind "sparsified" "Die höheren Ebenen der Indizes, um die Ausgabe der Konsole ein bisschen einfacher für die Augen zu machen. – jezrael

2

@ Antwort jezrael ist der richtige Weg ist, es zu tun, und die Art, wie ich es tun würde, wenn ich Code jemand anderes schrieb lesen würde.

Aber hier sind einige kreative schnelle und schmutzige Weise

df = df.T 
df.index = [['CU-101'] * len(df), df.index] 
df.columns = [['Hour'] * len(df.columns), df.columns] 

pd.concat([pd.concat([df.T], keys=['CU-101'])], axis=1, keys=['Hour'])