【问题标题】:Reshaping Pandas DataFrame: switch columns to indices and repeated values as columns重塑 Pandas DataFrame:将列切换为索引,将重复值切换为列
【发布时间】:2018-11-14 12:45:19
【问题描述】:

我很难弄清楚如何重塑这个 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' 列的唯一值每个都成为一个列,而年份列每个都成为该国家/地区的 multiIndex 的一部分。感谢您的帮助,谢谢!

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

【问题讨论】:

    标签: python pandas dataframe pivot-table


    【解决方案1】:

    使用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
    

    【讨论】:

    • 谢谢 Jezrael,我在执行这些额外步骤时遇到了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2018-07-16
    • 2012-06-14
    相关资源
    最近更新 更多