2016-07-16 16 views
2

hier ist mein Datenrahmen:konvertieren bestimmte Zeilen von Pandas Datenrahmen in Multiindex

  0  1  2 
0 0  0.0 20.0  NaN 
    1  1.0 21.0  NaN 
    2  2.0 22.0  NaN 
    ID  NaN NaN 11111.0 
    Year NaN NaN 2011.0 
1 0  3.0 23.0  NaN 
    1  4.0 24.0  NaN 
    2  5.0 25.0  NaN 
    3  6.0 26.0  NaN 
    ID  NaN NaN 11111.0 
    Year NaN NaN 2012.0 

Ich mag die ‚ID‘ und ‚Jahr‘ Zeilen Datenrahmen Index mit ‚ID‘ zu seinem level = 0 und ‚Jahr konvertieren 'Level sein = 1. Ich habe versucht, Stack() zu verwenden, kann es aber immer noch nicht herausfinden.

Editiert:

     0  1 
    11111 2011 0  0.0 20.0 
       1  1.0 21.0 
       2  2.0 22.0 
     2012 0  3.0 23.0 
       1  4.0 24.0 
       2  5.0 25.0 
       3  6.0 26.0 
+0

Row Indizes meine gewünschte Ausgabe wie folgt aussehen sollte? für welche Zeilen? Können Sie Ihr gewünschtes Ergebnis zeigen? – ako

+0

Was ist die Logik in den Daten? "ID" und "Year" wiederholen sich so oft? Folgt es immer den Zeilen, die es identifiziert? – ako

+0

@ako: Die Notwendigkeit für diese Art von Verarbeitung ergab sich aus einer anderen Operation auf dem Datenrahmen durchgeführt. In diesem Fall hatten die Spalten (0 & 1) Listenwerte wie [20,21,22], die gestapelt waren, aber dies führte zu dem Problem, auf das in der Frage Bezug genommen wurde. –

Antwort

0

Dies sollte funktionieren:

df1 = df.loc[pd.IndexSlice[:, ['ID', 'Year']], '2'] 
dfs = df1.unstack() 
dfi = df1.index 
dfn = df.drop(dfi).drop('2', axis=1).unstack() 

dfn.set_index([dfs.ID, dfs.Year]).stack() 

enter image description here

Verwandte Themen