Мне нужно изменить форму моего фрейма данных так, чтобы он был широким, а не длинным, показывая каждую дату в виде заголовков столбцов и двух индексов для состояния и имени переменной. Я безуспешно пытался использовать transpose (), melt (), stack (), unstack (), pivot () и set_index (). Пожалуйста, порекомендуйте!

Ближе всего к решению я подошел к решению forecasts.set_index(['State', 'Revenue', 'YoY_Change]) или forecasts.set_index(['Date']).T для транспонирования столбца даты, но ни одно из них не является правильным решением.

Мои данные выглядят так:

enter image description here

И мне нужно, чтобы это выглядело так:

enter image description here

0
JCM 13 Ноя 2020 в 00:56

1 ответ

Лучший ответ

Это melt, за которым следует pivot:

(df.melt(['State','Date'])
   .pivot_table(index=['State', 'variable'], columns='Date', values='value', aggfunc='first')
)
1
JCM 13 Ноя 2020 в 15:56