如何使用Python反转大型数据集的列

时间:2018-11-04 05:33:37

标签: python python-3.x

我正在使用大约90万行的大型数据集(即,在数个年份(1970-2014年)中有182个国家/地区的每个国家/地区大约有50-60个指标。我正在尝试使用Python制作“指标代码”作为新列,因此它按年份列出了每个国家/地区与每个相关指标的所有相关数据。请记住,所有年份(1970-2014年)都未标记在单个标签(即年份)下

原始数据集

Country Indicator Code   2001 2001 2003 2004 

US      Enrollment Rate  99%  98%  97%  96% 

US      Literacy Rate    99%  93%  95%  98%  

输出数据集的目标

Country  Year    Enrollment Rate Literacy Rate etc. 
US       2001     99%            99% 

我尝试了以下代码

res2 = data.pivot_table(index=['Country_Code'], columns=['Indicator_Code'],
                 values=['2006','2007'], aggfunc='first', fill_value=0)

这很接近,但是指标每年都在重复,并且年份似乎是3D。我尝试将所有年份移至列或索引部分,但这只是返回Memory错误。

 res = data.pivot_table(index=['Country_Code','1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980'], columns=['Indicator_Code'], aggfunc='first', fill_value=0)

我已经尝试过了,但是由于某种原因它也没有起作用。

1 个答案:

答案 0 :(得分:1)

一个好问题;您需要将列从宽格式更改为长格式(melt, see docs),然后旋转其他列

m = df.melt(id_vars=['Country', 'IndicatorCode'], var_name='Year')
m['value'] = pd.to_numeric(m['value'].str.strip(r'%'))
m = m.pivot_table(index=['Country', 'Year'], columns=['IndicatorCode'], 
                  values='value')
del m.columns.name
m.reset_index(inplace=True)
print(m)

  #Country  Year  EnrollmentRate  LiteracyRate
#0      US  2001              99            99
#1      US  2002              98            93
#2      US  2003              97            95
#3      US  2004              96            98