2013-04-01 10 views
7

sto lavorando in zipline e panda e hanno convertito un pandas.Panel ad un pandas.DataFrame utilizzando il metodo to_frame(). Questa è la risultante pandas.DataFrame che come potete vedere è multi-indicizzato:Conversione di un panda MultiIndex dataframe da righe-saggio colonna-saggio

        price 
major      minor     
2008-01-03 00:00:00+00:00 SPY 129.93 
          KO  26.38 
          PEP  64.78 
2008-01-04 00:00:00+00:00 SPY 126.74 
          KO  26.43 
          PEP  64.59 
2008-01-07 00:00:00+00:00 SPY 126.63 
          KO  27.05 
          PEP  66.10 
2008-01-08 00:00:00+00:00 SPY 124.59 
          KO  27.16 
          PEP  66.63 

ho bisogno di convertire questa cornice di simile a questa:

      SPY  KO  PEP 
2008-01-03 00:00:00+00:00 129.93 26.38 64.78 
2008-01-04 00:00:00+00:00 126.74 26.43 64.59 
2008-01-07 00:00:00+00:00 126.63 27.05 66.10 
2008-01-08 00:00:00+00:00 124.59 27.16 66.63 

Ho provato il metodo di rotazione, pila/disimpilare, ecc. ma questi metodi non sono quello che sto cercando. Sono davvero bloccato a questo punto e ogni aiuto è apprezzato.

risposta

12

Poiché si dispone già di un MultiIndex, stack e unstack sono ciò che si desidera utilizzare per spostare le righe in colonne e viceversa. Detto questo, unstack dovrebbe fare esattamente quello che vuoi ottenere. Se hai un DataFrame df allora il df2 = df.unstack('minor') dovrebbe fare il trucco. O più semplicemente, dal momento che per impostazione predefinita stack/unstack utilizza il livello più interno, df2 = df.unstack().

+4

Aargh; bastonami anche 'pivot' dovrebbe funzionare, dopo aver ripristinato l'indice, ad esempio' df.reset_index(). pivot ("major", "minor") '(con o senza un', "price") 'or' [" price "] ', a seconda di quanto sia importante se il nome è ancora fluttuante.) – DSM

+0

Ha bello, ovviamente non stavo usando correttamente lo stacco, grazie. –

Problemi correlati