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

使用Pandas将DataFrame多列合并为单列的实现方法

解决Pandas两列合并为单列的问题

嘿,这个需求我经常碰到,给你几个实用的Pandas解决方案,都能完美得到你想要的单列结果:

方法1:使用stack()(最简洁直观)

stack()是Pandas中处理行列转换的利器,它会自动把每一行的列元素按顺序堆叠起来,还能保留原有的NaN值,完全匹配你的输出要求:

import pandas as pd
import numpy as np

# 先构造你的示例DataFrame
df = pd.DataFrame({'C1': ['A', 'C', 'E', 'G'], 'C2': ['B', np.nan, 'F', 'H']})

# 执行堆叠操作并整理结果
result = df.stack().reset_index(drop=True).to_frame(name='new')
print(result)

解释:

  • df.stack():将每一行的C1、C2元素依次堆叠成一个Series,保留NaN
  • reset_index(drop=True):去掉堆叠后生成的多级索引,重置为连续的整数索引
  • to_frame(name='new'):把Series转换成DataFrame,并指定列名为new

方法2:使用melt()(宽表转长表经典方法)

如果你熟悉Pandas的宽转长操作,melt()也是个不错的选择,适合更复杂的多列转换场景:

result = pd.melt(df, value_vars=['C1', 'C2'], value_name='new')[['new']].reset_index(drop=True)
print(result)

解释:

  • pd.melt(...):指定要转换的列(value_vars),并设置结果列名为new
  • [['new']]:只保留我们需要的new列
  • reset_index(drop=True):重置索引为连续整数

方法3:使用concat()(最直观的拼接方式)

如果你喜欢更直白的逻辑,可以直接把两列作为独立的Series拼接起来:

result = pd.concat([df['C1'], df['C2']], ignore_index=True).to_frame(name='new')
print(result)

解释:

  • pd.concat([df['C1'], df['C2']]):按顺序拼接C1和C2两个Series
  • ignore_index=True:忽略原列的索引,生成新的连续索引
  • to_frame(name='new'):转换为指定列名的DataFrame

这三种方法都能得到你想要的输出,其中stack()代码最简洁,推荐优先使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:59:11