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

Pandas如何将3个含NaN的列合并为仅保留有效字符串的单列

实现方案

你提到的场景下每行在指定三列中仅有一个非NaN字符串,直接按行提取唯一非空值即可,以下是可直接运行的完整代码:

步骤1:构造示例测试数据

import pandas as pd
import numpy as np

# 按照你给出的结构构造DataFrame
data = {
    'Q3_4_4': {
        'R_00RfS8OP6QrTNtL': np.nan,
        'R_3JtmbtdPjxXZAwA': np.nan,
        'R_3G2sp6TEXZmf2KI': 'hello'
    },
    'Q3_4_5': {
        'R_00RfS8OP6QrTNtL': 'hi',
        'R_3JtmbtdPjxXZAwA': np.nan,
        'R_3G2sp6TEXZmf2KI': np.nan
    },
    'Q3_4_6': {
        'R_00RfS8OP6QrTNtL': np.nan,
        'R_3JtmbtdPjxXZAwA': 'bye',
        'R_3G2sp6TEXZmf2KI': np.nan
    }
}
df = pd.DataFrame(data)

步骤2:合并列生成Q3_4

提供两种常用实现,可根据场景选择:

  • 性能最优方案(适合大数据量,利用按行向后填充取第一个非空值)
df['Q3_4'] = df[['Q3_4_4', 'Q3_4_5', 'Q3_4_6']].bfill(axis=1).iloc[:, 0]
  • 可读性最优方案(语义明确,方便扩展规则)
df['Q3_4'] = df[['Q3_4_4', 'Q3_4_5', 'Q3_4_6']].apply(lambda x: x.dropna().iloc[0], axis=1)

特殊场景适配

如果你的实际数据存在某行多列同时有非空字符串的情况,需要拼接所有非空值的话,可以将上述apply内的逻辑替换为:

lambda x: ''.join(x.dropna())

运行后生成的Q3_4列完全符合你要求的输出:第一行hi、第二行bye、第三行hello。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:03