我正在使用大约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)
我已经尝试过了,但是由于某种原因它也没有起作用。
答案 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