You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Python中重塑Eurostat宽格式数据:时间列转行、na_item转列

解决方案

你的需求是将行=na_item、列=季度数值的DataFrame转换为行=季度、列=各na_item数值的结构,之前用pd.melt只得到了长格式数据,需要结合后续操作实现目标,以下是两种可行方案:

方案一:melt + pivot(通用场景)

适用于原始数据包含多个维度列(如geo、unit、s_adj)的情况,步骤如下:

  1. 先将季度列转成长格式(每行对应一个na_item+时间+数值):
# 提取所有非时间维度列作为id_vars,自动识别所有时间列作为value_vars
melted_data = pd.melt(
    data,
    id_vars=['na_item', 'geo', 'unit', 's_adj'],
    var_name='time',
    value_name='millions'
)
  1. 将长格式数据转成目标宽格式:
# 以time为行索引,na_item为列,数值为值
result = melted_data.pivot(
    index='time',
    columns='na_item',
    values='millions'
).reset_index()

# 如果需要保留geo/unit/s_adj等固定维度列,可调整索引:
# result = melted_data.pivot(
#     index=['time', 'geo', 'unit', 's_adj'],
#     columns='na_item',
#     values='millions'
# ).reset_index()

方案二:直接转置(简化场景)

由于你的筛选条件中geo、unit、s_adj都是单一固定值(SE、CP_MEUR、NSA),可以直接转置实现:

# 设置na_item为索引,移除无关维度列
temp_data = data.set_index('na_item').drop(['geo', 'unit', 's_adj'], axis=1)

# 转置后重置索引,重命名时间列
result = temp_data.T.reset_index().rename(columns={'index': 'time'})

结果说明

最终result的结构为:每行对应一个季度(如2019-Q1),列包含B1GQ、P3、P6、P7、D2的对应数值,完全符合你的需求。

内容的提问来源于stack exchange,提问作者cfolder umt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:52:50