使用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,保留NaNreset_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两个Seriesignore_index=True:忽略原列的索引,生成新的连续索引to_frame(name='new'):转换为指定列名的DataFrame
这三种方法都能得到你想要的输出,其中stack()代码最简洁,推荐优先使用~
内容的提问来源于stack exchange,提问作者noswear
相关产品推荐
相关产品推荐

