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

如何用Pandas将列转换为行?多年份销售数据重塑需求

Pandas实现宽表转长表(复合表头处理)

步骤1:读取并预处理复合表头数据

原CSV的表头是两行(第一行年份、第二行指标),读取时要指定header=[0,1]识别多级列索引,同时用sep='\s+'处理空格分隔:

import pandas as pd

# 读取数据(替换成你的文件路径)
df = pd.read_csv('your_dataset.csv', sep='\s+', header=[0, 1])

# 统一指标列名的大小写(原数据里有SaleA大写,转成小写统一)
df.columns = df.columns.set_levels(df.columns.get_level_values(1).str.lower(), level=1)

步骤2:转换为目标长格式

先把Country设为索引,然后通过stack()把年份列(多级索引的第一层)“拆”成行,最后重置索引并整理列名:

# 转长格式
df_long = df.set_index('Country').stack(level=0).reset_index()

# 重命名列到目标格式
df_long.columns = ['Country', 'year', 'saleA', 'saleB']

运行后df_long的结构如下:

CountryyearsaleAsaleB
USAyear20182223
USAyear201932332
USAyear20203165
chinayear20181212
chinayear2019266
chinayear20206678

为什么直接用pd.melt失败?

因为原数据是多级列索引,普通melt无法识别年份和指标的层级关系,必须先通过stack()处理多级列,或者手动拆分列名后再melt,但上述方法更简洁。

内容的提问来源于stack exchange,提问作者Arpan Poudel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:01:02