Как преобразовать многоуровневые столбцы в многоуровневый индекс

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных с многоуровневыми столбцами, такими как этот:

               x1                x2       
              A        B        A        B
date
2021-01-01    11.82    22.88    11.83    22.93
2021-01-02    11.95    22.78    12.02    23.08
2021-01-03    12.18    22.99    12.18    22.99
 

Я бы хотел перенести / изменить его, чтобы он выглядел так:

                    x1       x2
sym  date
A    2021-01-01    11.82    11.83
     2021-01-02    11.95    12.02
     2021-01-03    12.18    12.18
B    2021-01-01    22.88    22.93
     2021-01-01    22.78    23.08
     2021-01-03    22.99    22.99
 

Это, я надеюсь, позволит мне группироваться по индексу sym (индекс верхнего уровня) и создавать новые столбцы на основе вычислений с данными в существующих столбцах. Это было бы альтернативой выделению новых кадров данных для каждого sym, а затем объединению их обратно после преобразований. Я впервые работаю с многоуровневыми столбцами/индексом, поэтому у меня возникли некоторые проблемы с поиском решений.

Комментарии:

1. df.stack(level=1)

2. @Psidom Спасибо тебе. Это очень близко к тому, что я искал, и выход, который я рассматривал. Я предпочитаю, чтобы все » сим » были сгруппированы вместе, а не вложены в каждую дату.

Ответ №1:

Вы можете попробовать стек с уровнем подкачки:

 df.rename_axis(['','sym'],axis=1).stack().swaplevel().sort_index())
 

                    x1     x2
sym date                    
A   2021-01-01  11.82  11.83
    2021-01-02  11.95  12.02
    2021-01-03  12.18  12.18
B   2021-01-01  22.88  22.93
    2021-01-02  22.78  23.08
    2021-01-03  22.99  22.99
 

Комментарии:

1. Спасибо. Это именно то, что я искал. .stack() и .swaplevel () — это новые для меня методы, поэтому я обязательно прочитаю.