Изменение формы Pandas DataFrame: переключение столбцов на индексы и повторяющиеся значения в виде столбцов - PullRequest
0 голосов
/ 14 ноября 2018

Мне было очень тяжело понять, как изменить этот DataFrame. Извините за формулировку вопроса, эта проблема кажется немного специфической.

У меня есть данные по нескольким странам вместе с колонкой из 6 повторяющихся признаков и года, когда эти данные были записаны. Это выглядит примерно так (за исключением некоторых функций и столбцов):

   Country        Feature           2005    2006    2007    2008    2009

0  Afghanistan    Age Dependency    99.0    99.5    100.0   100.2   100.1
1  Afghanistan    Birth Rate        44.9    43.9    42.8    41.6    40.3
2  Afghanistan    Death Rate        10.7    10.4    10.1    9.8     9.5
3  Albania        Age Dependency    53.5    52.2    50.9    49.7    48.7
4  Albania        Birth Rate        12.3    11.9    11.6    11.5    11.6
5  Albania        Death Rate        5.95    6.13    6.32    6.51    6.68

Похоже, что в этой ситуации нет способа заставить pivot_table () работать, и у меня возникают проблемы с поиском других шагов, которые я могу предпринять, чтобы все выглядело так, как я хочу:

                       Age Dependency    Birth Rate    Death Rate

Afghanistan    2005    99.0              44.9          10.7
               2006    99.5              43.9          10.4
               2007    100.0             42.8          10.1   
               2008    100.2             41.6          9.8
               2009    100.1             40.3          9.5

Albania        2005    53.5              12.3          5.95
               2006    52.2              11.9          6.13
               2007    50.9              11.6          6.32
               2008    49.7              11.5          6.51
               2009    48.7              11.6          6.68

Где уникальные значения столбца «Feature» становятся столбцами, а столбцы года - частью мультииндекса страны. Любая помощь приветствуется, спасибо!

РЕДАКТИРОВАТЬ: Я проверил «дубликат», но я не вижу, как этот вопрос такой же, как этот. Как бы я поместил повторяющиеся значения в свой столбец объектов как уникальные столбцы, одновременно перенеся годы, чтобы они стали мультииндексом со странами? Извините, если я просто что-то не понимаю.

1 Ответ

0 голосов
/ 14 ноября 2018

Используйте melt с изменением формы на set_index и unstack:

df = (df.melt(['Country','Feature'], var_name='year')
      .set_index(['Country','year','Feature'])['value']
      .unstack())
print (df)
Feature           Age Dependency  Birth Rate  Death Rate
Country     year                                        
Afghanistan 2005            99.0        44.9       10.70
            2006            99.5        43.9       10.40
            2007           100.0        42.8       10.10
            2008           100.2        41.6        9.80
            2009           100.1        40.3        9.50
Albania     2005            53.5        12.3        5.95
            2006            52.2        11.9        6.13
            2007            50.9        11.6        6.32
            2008            49.7        11.5        6.51
            2009            48.7        11.6        6.68
...