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

Python中pandas.DataFrame的pivot、unpivot操作及宽长表转换方法

宽格式Pandas DataFrame转长格式实现方案

你可以通过pandas提供的两种逆透视操作实现需求,具体实现如下:

前置准备

首先你已经通过pivot生成了宽表,我们先将生成的宽表保存为变量wide_df:

import pandas as pd
d = { 'year': [2019,2020,2021,2022], 'cat1': ['a','a','b','b'], 'cat2': ['c1','c2','c3','c4'],'value': [1,2,300,400]}
df = pd.DataFrame(data=d)
wide_df = df.pivot(index=['year','cat1'], columns='cat2', values='value').reset_index()

方法1:使用melt函数(可读性更高)

melt是pandas专门设计用于逆透视的函数,参数配置清晰易读:

long_df = wide_df.melt(
    id_vars=['year', 'cat1'],  # 保留不需要转换的维度列
    var_name='cat2',           # 原c1/c2/c3/c4列名转换后对应的新列名
    value_name='value'         # 原数值转换后对应的新列名
).dropna().reset_index(drop=True)  # 去掉空值行、重置索引

方法2:使用stack方法(写法更简洁)

基于层级索引的stack方法可以更高效的完成转换,不需要额外配置太多参数:

long_df = wide_df.set_index(['year','cat1']).stack().reset_index(name='value')

输出结果

两种方法最终得到的long_df都和要求的输出一致:

year cat1 cat2  value
0  2019    a   c1    1.0
1  2020    a   c2    2.0
2  2021    b   c3  300.0
3  2022    b   c4  400.0

内容的提问来源于stack exchange,提问作者vishvas chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:54:03