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

在Pandas DataFrame中合并列并按优先级覆盖值的技术问询

在大型Pandas DataFrame中按规则合并多列生成目标列

需求说明

保留col1的数值,当col2或col3存在有效值时,用对应列的数值覆盖col1,最终生成名为merged的目标列。

示例数据

import pandas as pd
import numpy as np

df1 = pd.DataFrame(data=[['1', 'A','nan','nan'],
                         ['2', 'B','B1','nan'],
                         ['3', 'C','C1','nan'],
                         ['4', 'C','nan','C2'],
                         ['5', 'D','D2','nan'],
                         ['6', 'E','nan','E3']
                         ]
                   , columns=['ObjectID', 'col1', 'col2','col3'])

解决方案

先将数据中的字符串'nan'转换为Pandas可识别的缺失值NaN,再通过矢量化操作高效生成目标列(避免循环,适配大型DataFrame):

步骤1:转换缺失值

df1 = df1.replace('nan', np.nan)

步骤2:生成merged列(两种高效方法可选)

方法一:使用bfill(axis=1)按行填充

通过指定列优先级,从右到左填充缺失值,取第一列结果:

# 优先级:col3 > col2 > col1,调整优先级只需修改列列表顺序
df1['merged'] = df1[['col3', 'col2', 'col1']].bfill(axis=1).iloc[:, 0]
方法二:使用combine_first链式覆盖

依次用高优先级列覆盖低优先级列的缺失值:

# 优先级:col2 > col3 > col1,调整优先级交换col2和col3位置即可
df1['merged'] = df1['col2'].combine_first(df1['col3']).combine_first(df1['col1'])

最终结果

执行代码后,df1将生成目标列merged,结果如下:

ObjectID col1 col2 col3 merged
0        1    A  NaN  NaN      A
1        2    B   B1  NaN     B1
2        3    C   C1  NaN     C1
3        4    C  NaN   C2     C2
4        5    D   D2  NaN     D2
5        6    E  NaN   E3     E3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:31