Преобразуйте длинный фрейм данных в широкий фрейм данных на python (pandas) с помощью стека/распаковки или groupby

#python #pandas #dataframe

Вопрос:

У меня есть длинный фрейм данных, который выглядит следующим образом, с двумя заголовками: первый с переменными, а второй только с датой в широком формате.

Компания Цена объем
Дата
1/1/11 TSLA 2 1
1/2/11 TSLA 2 1
1/1/11 MSFT 2 1
1/2/11 MSFT 2 1

Я хочу перевести его в длинный формат:

Цена объем
Дата TSLA MSFT TSLA MSFT
1/1/11 2 2 1 1
1/2/11 2 2 1 1

Если возможно, я хочу использовать для этого stack или unstack/ groupby. Предполагая, что у меня есть длинный фрейм данных, сохраненный как df — как бы я преобразовал его в фрейм данных pandas с именем wide?

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

1. df.pivot('date', 'company') ? документы панд очень полезны

Ответ №1:

Это set_index с append=True добавлением company в качестве второго уровня мультииндекса, затем unstack company в столбцы:

 df = df.set_index('company', append=True).unstack(level='company')
 

df :

         price      volume     
company  MSFT TSLA   MSFT TSLA
date                          
1/1/11      2    2      1    1
1/2/11      2    2      1    1
 

Фрейм данных:

 df = pd.DataFrame({'company': {'1/1/11': 'MSFT', '1/2/11': 'MSFT'},
                   'price': {'1/1/11': 2, '1/2/11': 2},
                   'volume': {'1/1/11': 1, '1/2/11': 1}})