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

如何将Pandas中的两列合并为一列?

解决Pandas合并互补列的问题

嘿,这个需求太常见啦!你的数据里B和C列是互补的(每行只有一列有值,另一列为NaN),咱们用Pandas的几种方法都能轻松合并成BC列,下面给你详细说:

1. 先还原你的原始数据

首先咱们先把你给出的DataFrame用代码复现出来,方便后续测试:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [3, np.nan, 5, np.nan],
    'C': [np.nan, 2, np.nan, 1]
})

2. 方法一:用combine_first()(最直观的方法)

这个方法专门用来处理这种互补列的合并——优先保留左边列(B)的非空值,左边为空时用右边列(C)的值填补:

# 合并B和C为BC列
df1['BC'] = df1['B'].combine_first(df1['C'])
# 如果不需要原来的B、C列,可以删掉
df1 = df1.drop(['B', 'C'], axis=1)

3. 方法二:用fillna()(逻辑简单易懂)

和上面的思路类似,直接用C列的值填充B列的NaN,然后赋值给新列:

df1['BC'] = df1['B'].fillna(df1['C'])
df1 = df1.drop(['B', 'C'], axis=1)

4. 方法三:按行填充(适合多列合并场景)

如果以后你需要合并超过两列的互补数据,用bfill(axis=1)(按行向后填充)会更灵活:

# 选择B、C列,按行向后填充非空值,取第一列作为合并结果
df1['BC'] = df1[['B', 'C']].bfill(axis=1).iloc[:, 0]
df1 = df1.drop(['B', 'C'], axis=1)

5. 可选:把BC列转为整数类型

上面的方法得到的BC列是浮点数(因为NaN是浮点类型),如果需要整数的话,可以加一句:

df1['BC'] = df1['BC'].astype(int)

最终结果

运行后你会得到期望的DataFrame:

A  BC
0  1   3
1  2   2
2  3   5
3  4   1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:42:32