2017-03-03 28 views
2

我有世界银行看起来像这样的数据:移调数据在Python

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 

等等等等

回答

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 
+0

完美,@米奇!谢谢!! –

+0

@劳拉不客气! – miradulo