Плавление в pandas теряет индекс - PullRequest
1 голос
/ 28 мая 2020

У меня есть следующий фрейм данных:

        Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Year                                                
2010    9.8 9.8 9.9 9.9 9.6 9.4 9.4 9.5 9.5 9.4 9.8 9.3
2011    9.1 9.0 9.0 9.1 9.0 9.1 9.0 9.0 9.0 8.8 8.6 8.5
2012    8.3 8.3 8.2 8.2 8.2 8.2 8.2 8.1 7.8 7.8 7.7 7.9

Я хочу добиться следующего результата:

      Month Values
Year
2010  Jan    9.8
2010  Feb    9.8
2010  Mar    9.9
etc......

Я попробовал предложенный здесь метод: pandas, растопить , индекс сохранения unmelt :

df = pd.melt(df.reset_index(), id_vars='index',value_vars=months)

«Месяцы» - это список, который я создал, получив список имен столбцов для месяцев:

months = df.columns.values.tolist()[1:]

Однако результат было:

       index variable  value
   0    NaN   Jan      9.8
   1    NaN   Jan      9.1
   2    NaN   Jan      8.3
   3    NaN   Jan      8.0
   4    NaN   Jan      6.6

Итак, я хочу сохранить значение года в качестве индекса. Как я могу это сделать? Спасибо.

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Если у вас есть такой хороший индекс, вы можете stack:

df.rename_axis('Month', axis='columns').stack().to_frame('Values')

Метод rename_axis - это просто сахар для получения хороших меток индекса.

0 голосов
/ 28 мая 2020

С melt:

df.reset_index().melt('Year',var_name='Month',value_name='Values').set_index('Year')

    Month  Values
Year              
2010   Jan     9.8
2011   Jan     9.1
2012   Jan     8.3
2010   Feb     9.8
2011   Feb     9.0
.........
.......

С stack():

df.rename_axis('Month',axis=1).stack().reset_index(1,name='Values')

      Month  Values
Year              
2010   Jan     9.8
2010   Feb     9.8
2010   Mar     9.9
2010   Apr     9.9
2010   May     9.6
2010   Jun     9.4
.......
......
...