在Python中转置数据

时间:2017-03-03 15:07:09

标签: python pandas dataframe transpose

我有来自世界银行的数据,如下所示:

Country Name    Country Code    1995    1996    1997    1998    1999    2000    2001    2002    2003    2004    2005    2006    2007    2008    2009    2010    2011    2012    2013    2014    2015
Aruba           ABW            80326    83195   85447   87276   89004   90858   92894   94995   97015   98742   100031  100830  101218  101342  101416  101597  101936  102393  102921  103441  103889

这是来自250个国家的人口数据,为了举个例子,我刚刚展示了第一个。我怎样才能将这个转换成每个国家和年份这样的一行呢?

Country Name    Country Code    Year    Population
Aruba           ABW             1995    80326
Aruba           ABW             1996    83195
Aruba           ABW             1997    85447
Aruba           ABW             1998    87276

依旧等等

1 个答案:

答案 0 :(得分:4)

您可以使用pd.melt

pd.melt(df, id_vars=['Country Name', 'Country Code'], 
        var_name='Year', value_name='Population')

或者,可以将Country NameCountry Code添加到索引,堆栈,然后重置索引

df = df.set_index(['Country Name', 'Country Code']).stack().reset_index()

但是你必须在进程后设置列名。 pd.melt可能更好,并且很可能也更快。

<强>演示

>>> pd.melt(df, id_vars=['Country Name', 'Country Code'],
            var_name='Year', value_name='Population')

   Country Name Country Code  Year  Population
0         Aruba          ABW  1995       80326
1         Aruba          ABW  1996       83195
2         Aruba          ABW  1997       85447
3         Aruba          ABW  1998       87276
4         Aruba          ABW  1999       89004
5         Aruba          ABW  2000       90858
6         Aruba          ABW  2001       92894
7         Aruba          ABW  2002       94995
8         Aruba          ABW  2003       97015
9         Aruba          ABW  2004       98742
10        Aruba          ABW  2005      100031
11        Aruba          ABW  2006      100830
12        Aruba          ABW  2007      101218
13        Aruba          ABW  2008      101342
14        Aruba          ABW  2009      101416
15        Aruba          ABW  2010      101597
16        Aruba          ABW  2011      101936
17        Aruba          ABW  2012      102393
18        Aruba          ABW  2013      102921
19        Aruba          ABW  2014      103441
20        Aruba          ABW  2015      103889