2013-04-01 4 views
7

Я работаю в zipline и pandas и преобразовал pandas.Panel в pandas.DataFrame с использованием метода to_frame(). Это в результате pandas.DataFrame, который, как вы можете видеть это мульти-индексируются:Преобразование pandas MultiIndex DataFrame от строк по столбцам

        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 

Мне нужно преобразовать этот кадр, чтобы выглядеть следующим образом:

      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 

Я попробовал метод поворота, стек/unstack и т. д., но эти методы не то, что я ищу. Я действительно застрял в этом пункте, и любая помощь приветствуется.

ответ

12

Поскольку у вас уже есть MultiIndex, stack и unstack - это то, что вы хотите использовать для перемещения строк в столбцы и наоборот. При этом unstack должен делать именно то, что вы хотите выполнить. Если у вас есть DataFrame df, то df2 = df.unstack('minor') должен сделать трюк. Или проще, поскольку по умолчанию stack/unstack используют самый внутренний уровень, df2 = df.unstack().

+4

Aargh; Избили меня. 'pivot' также должен работать после сброса индекса, т. е.' df.reset_index(). pivot ("major", "minor") '(с или без', "price") 'или' ["price"] ', в зависимости от того, насколько важно, будет ли имя по-прежнему плавать.) – DSM

+0

Ха, я, очевидно, не использовал отламывание правильно, спасибо. –

Смежные вопросы