首页 > 解决方案 > 重塑 Pandas DataFrame:将列切换为索引并将重复值切换为列

问题描述

我很难弄清楚如何重塑这个 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 的一部分。任何帮助表示赞赏,谢谢!

编辑:我检查了“重复”,但我看不出这个问题与这个问题有何相同。如何将我的特征列中的重复值作为唯一列放置,同时移动年份以成为与国家/地区的多索引?对不起,如果我没有得到什么。

标签: pythonpandasdataframepivot-table

解决方案


melt与 reshape byset_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

推荐阅读