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

如何在Pandas中按axis=0合并两列并保留对应test列数据

合并Pandas列并保留对应test列数据

原始数据

import pandas as pd
import numpy as np

d_test = {
    'c1' : ['a', 'b', np.nan, 'c'],
    'c2' : ['d', np.nan, 'e', 'f'],
    'test': [1,2,3,4],
}
df_test = pd.DataFrame(d_test)

需求说明

需要将c1和c2两列按行方向(axis=0)合并为一列,同时保留每行对应的test列数据,最终得到如下结果:

combined  test
0         a     1
1         d     1
2         b     2
3         e     3
4         c     4
5         f     4

问题场景

已尝试使用pd.concat([df_test.c1 , df_test.c2], axis = 0)合并列,但无法同时保留对应的test列数据。

解决方案

方法1:使用melt函数(推荐)

melt是Pandas中专门用于宽表转长表的函数,可直接指定需要保留的列和需要合并的列:

# 转换宽表为长表,保留test列,合并c1、c2
result = df_test.melt(
    id_vars=['test'],  # 要保留的关联列
    value_vars=['c1', 'c2'],  # 需要合并的目标列
    value_name='combined'  # 合并后的列名
)

# 过滤空值、调整顺序并重置索引
result = result.dropna(subset=['combined']).sort_values('test').reset_index(drop=True)
# 调整列顺序匹配目标格式
result = result[['combined', 'test']]

print(result)

方法2:拆分后再合并

分别将c1、c2与test列组合成新的DataFrame,再进行合并:

# 构造c1+test和c2+test的DataFrame,统一列名
df_c1 = df_test[['c1', 'test']].rename(columns={'c1': 'combined'})
df_c2 = df_test[['c2', 'test']].rename(columns={'c2': 'combined'})

# 合并两个DataFrame,过滤空值并整理
result = pd.concat([df_c1, df_c2], axis=0)
result = result.dropna(subset=['combined']).sort_values('test').reset_index(drop=True)

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:20:12