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

如何将5×3的Pandas DataFrame转换为15×1格式?

高效实现多列DataFrame转单列堆叠

针对你需要将多列DataFrame按列顺序堆叠成单列的需求,完全不需要多次调用append,这里有几种简洁且高效的实现方式,尤其适合数十列的场景:

方法1:一行搞定的stack()

这是最简洁的写法,利用Pandas的层级索引转换能力,直接将所有列按顺序堆叠:

import pandas as pd

# 构造示例数据
df = pd.DataFrame([
    [1,2,3],
    [4,5,6],
    [7,8,9],
    [10,11,12],
    [13,14,15]
])

# 转换为单列DataFrame
single_col_df = df.stack().reset_index(drop=True).to_frame()

stack()会把每一列的元素依次转到行维度,生成带层级索引的Series,reset_index(drop=True)用来移除多余的层级索引,最后to_frame()可以把Series转回DataFrame格式。

方法2:灵活可控的pd.concat()

如果需要更明确地控制列的拼接顺序(比如自定义堆叠顺序),可以用pd.concat遍历列进行拼接:

# 按指定列顺序拼接所有列
single_col_df = pd.concat([df[col] for col in df.columns], ignore_index=True).to_frame()

这种方式通过列表推导式遍历所有列,把每一列作为单独的Series传入pd.concat,ignore_index=True确保最终的索引是连续递增的。

方法3:通用型的melt()

melt是Pandas处理宽表转长表的通用方法,也能实现这个需求:

# 转换后提取值列并重置索引
single_col_df = df.melt(value_name='data')['data'].reset_index(drop=True).to_frame()

melt会把所有列转为"变量-值"的结构,我们只需要提取值列即可得到目标单列数据。

性能说明

多次调用append的方式效率极低,因为每次append都会生成新的DataFrame,频繁的内存操作会导致处理大量列时速度骤降。上述三种方法都是批量操作,其中stack()的性能最优、代码最简洁;pd.concat()在需要自定义列顺序时更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:00:53