2016-04-11 8 views
6

Nehmen wir an, dass ich die folgende Datenrahmen in Pandas haben:Reshape breit zu lange in Pandas

   AA BB CC  
    date 
    05/03  1 2 3 
    06/03  4 5 6 
    07/03  7 8 9 
    08/03  5 7 1 

und ich möchte es auf die folgende verwandeln:

AA 05/03 1 
    AA 06/03 4 
    AA 07/03 7 
    AA 08/03 5 
    BB 05/03 2 
    BB 06/03 5 
    BB 07/03 8 
    BB 08/03 7 
    CC 05/03 3 
    CC 06/03 6 
    CC 07/03 9 
    CC 08/03 1 

Wie kann ich es tun?

Der Grund der Transformation von breit zu lang ist, dass ich in der nächsten Stufe diesen Datenrahmen mit einem anderen zusammenfassen möchte, basierend auf Daten und den anfänglichen Spaltennamen (AA, BB, CC).

Antwort

12

unstack gibt eine Reihe mit einem Multiindex:

In [38]: df.unstack() 
    Out[38]: 
     date 
    AA 05/03 1 
     06/03 4 
     07/03 7 
     08/03 5 
    BB 05/03 2 
     06/03 5 
     07/03 8 
     08/03 7 
    CC 05/03 3 
     06/03 6 
     07/03 9 
     08/03 1 
    dtype: int64 

Sie können auf der zurückgehenden Serie nennen reset_index:

In [39]: df.unstack().reset_index() 
Out[39]:   

    level_0 date 0 
0 AA  05-03 1 
1 AA  06-03 4 
2 AA  07-03 7 
3 AA  08-03 5 
4 BB  05-03 2 
5 BB  06-03 5 
6 BB  07-03 8 
7 BB  08-03 7 
8 CC  05-03 3 
9 CC  06-03 6 
10 CC  07-03 9 
11 CC  08-03 1 

oder ein Datenrahmen mit einem Multiindex konstruieren:

In [40]: pd.DataFrame(df.unstack())  
Out[40]:   

      0 
    date  
AA 05-03 1 
    06-03 4 
    07-03 7 
    08-03 5 
BB 05-03 2 
    06-03 5 
    07-03 8 
    08-03 7 
CC 05-03 3 
    06-03 6 
    07-03 9 
    08-03 1