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

如何在Pandas中合并DataFrame的两列生成新列name3

合并DataFrame两列生成新列的解决方案

给定如下结构的DataFrame:

name1 name2
carl  NaN
NaN   carl
peter NaN
NaN   peter
julia NaN
NaN   julia
jenny jenny
paul  paul
...

需要生成新列name3,取值规则为:每行取非缺失的那个值;若两列均有值且相同,则直接取该值,最终得到如下结果:

name1 name2 name3
carl  NaN   carl
NaN   carl  carl
peter NaN   peter
NaN   peter peter
julia NaN   julia
NaN   julia julia
jenny jenny jenny
paul  paul  paul
...

解决方法

方法1:使用combine_first

combine_first会优先保留第一列的非缺失值,当第一列为NaN时,用第二列的值填充,完美匹配需求:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'name1': ['carl', None, 'peter', None, 'julia', None, 'jenny', 'paul'],
    'name2': [None, 'carl', None, 'peter', None, 'julia', 'jenny', 'paul']
})

# 生成name3列
df['name3'] = df['name1'].combine_first(df['name2'])

方法2:使用fillna

逻辑与combine_first一致,用第二列的值填充第一列的NaN,结果相同:

df['name3'] = df['name1'].fillna(df['name2'])

方法3:使用行方向的填充函数

通过bfill或ffill按行填充缺失值,提取有效数据:

# 使用bfill向后填充,取每行第一个非NaN值
df['name3'] = df[['name1', 'name2']].bfill(axis=1).iloc[:, 0]

# 或使用ffill向前填充,取每行最后一个非NaN值
df['name3'] = df[['name1', 'name2']].ffill(axis=1).iloc[:, 1]

最终结果

执行上述任意方法后,得到的DataFrame如下:

name1   name2   name3
0    carl    NaN    carl
1     NaN    carl    carl
2   peter    NaN   peter
3     NaN   peter   peter
4   julia    NaN   julia
5     NaN   julia   julia
6   jenny   jenny   jenny
7    paul    paul    paul

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:05:33