重塑Pandas DataFrame:将列切换为索引,并将重复值作为列

时间:2018-11-14 12:45:19

标签: python pandas dataframe pivot-table

我很难解决如何重塑此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

“功能”列的唯一值分别成为一列,而年份列分别成为与国家/地区的multiIndex的一部分。感谢您的任何帮助,谢谢!

编辑:我检查了“重复项”,但看不到这个问题与这个问题有什么相同。我如何将重复值放在要素列中作为唯一列,同时又将年份变成与国家/地区的多元索引?抱歉,如果我什么都没得到。

1 个答案:

答案 0 :(得分:0)

使用meltset_indexunstack进行重塑:

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