我正在处理大约 90 万行的大型数据集(即有 182 个国家/地区,每个国家/地区在几年(1970-2014 年)中有大约 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 的。这些年来,我一直尝试移动到列或索引部分,但这只是返回内存错误。
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)
我已经试过了,但由于某种原因它也不起作用。
最佳答案
一个很好的问题;您需要将列从宽格式更改为长格式 ( 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
关于python - 如何在 Python 中反转大型数据集的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53138051/