Преобразование мультииндексного DataFrame pandas из строк в столбцы

Я работаю в зиплайне и пандах и преобразовал pandas.Panel в pandas.DataFrame, используя метод to_frame(). Это результирующий pandas.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

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


person Jason Strimpel    schedule 01.04.2013    source источник


Ответы (1)


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

person bdiamante    schedule 01.04.2013
comment
Ааргх; опередить меня. pivot тоже должно работать после сброса индекса, то есть df.reset_index().pivot("major", "minor"), "price") или ["price"] или без них, в зависимости от того, насколько важно, плавает ли имя по-прежнему). - person DSM; 02.04.2013
comment
Хорошо, я явно неправильно использовал unstack, спасибо. - person Jason Strimpel; 02.04.2013