python - 如何在 Python 中反转大型数据集的列

标签 python python-3.x

我正在处理大约 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/

相关文章:

python - 如何在 Discord.py 中获取用户的私有(private)消息 channel ?

java - 使用 nd4j 的 S 形导数

python - 如何知道python中 turtle 图形上特定文本的像素大小?

python - 对独立于列的每一行绝对值以及列名进行排序

python - 使用 Pika 关闭 RabbitMQ 连接 block 线程

python - JTables 和 Jython 事件

python - 尝试使用 whisper-merge 时出现错误 "TypeError: ' NoneType' object is not iterable"

python - 尝试使用 Python 验证 SHA1 消息签名。我究竟做错了什么?

python - 改进 Python NetworkX 图形布局

python - 如何解析多个子页面、合并/追加并向上传递到父级?