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

如何高效重塑Pandas DataFrame?求替代pd.wide_to_long的简便方案

Pandas宽表转长表的高效实现方法

给定输入DataFrame:

import pandas as pd

inputTable = pd.DataFrame({
    'A' : [1, 2, 3, 4, 5],
    'B' : [2, 3, 4, 5, 6],
    'C' : [3, 4, 5, 6, 7]
})

需要转换为如下长表结构:

resultingTable = pd.DataFrame({
    'Category' : ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'], 
    'Value'    : [1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7]
})

已知pd.wide_to_long()在此场景下过于冗余,除了pd.melt(),以下是几种更简洁高效的实现方式:

方法1:使用stack()方法

stack()是处理宽表转长表的轻量方法,尤其适合这种无额外索引的简单场景:

# 链式写法一步到位
output = (inputTable.stack()
                   .reset_index(name='Value')
                   .drop('level_0', axis=1)
                   .rename(columns={'level_1': 'Category'}))

stack()会将列标签转为行索引的一部分,后续通过reset_index()将其转回列,再调整列名即可得到目标结构。

方法2:简化版pd.melt()

pd.melt()本身就是为宽转长场景设计的,写法可以极度简洁:

output = pd.melt(inputTable, var_name='Category', value_name='Value')

直接指定var_name(原列名对应的新列名)和value_name(原数值对应的新列名),一行代码完成转换。

方法3:实例方法版melt()

与上面的pd.melt()逻辑完全一致,只是以DataFrame实例方法的形式调用,更符合面向对象的编码习惯:

output = inputTable.melt(var_name='Category', value_name='Value')

效率说明

在小规模数据集上,这些方法的性能差异可以忽略;但处理大规模数据时,stack()和简化版melt()都比wide_to_long()更高效,因为不需要处理复杂的参数映射逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:06:12