#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 () — это новые для меня методы, поэтому я обязательно прочитаю.