2016-04-11 15 views
6

Supponiamo che io ho il seguente dataframe in panda:rimodellare largo per lungo nella panda

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

e voglio trasformarlo al seguente:

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 

Come posso fare?

Il motivo della trasformazione da ampio a lungo è che, nella fase successiva, vorrei unire questo dataframe con un altro, in base alle date e ai nomi delle colonne iniziali (AA, BB, CC).

risposta

12

unstack restituisce una serie con un 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 

Si può chiamare reset_index sulla serie di ritorno:

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 

O costruire un dataframe con un multiindex:

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 
Problemi correlati