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

遍历同数据集同名列提取首个非空值生成新列的实现咨询

解决方案

你可以直接遍历你生成的列映射字典,用pandas的行方向后向填充逻辑快速实现「逐行取首个非空值」的需求,支持任意数量的重复同名列,代码如下:

核心实现代码

import pandas as pd
import numpy as np

# 变量说明:
# df:你的原始DataFrame
# col_map:你已经生成好的列映射字典,键为新列名,值为对应待合并的原始列名列表
for new_col_name, raw_col_list in col_map.items():
    # 沿列方向后向填充,取填充后的第一列即为每行首个非空值
    df[new_col_name] = df[raw_col_list].bfill(axis=1).iloc[:, 0]

# 可选操作:合并完成后删除原始的重复列
df = df.drop(columns=[col for sublist in col_map.values() for col in sublist])

逻辑说明

  • df[raw_col_list].bfill(axis=1):沿着列的方向,将每行的空值用该行后方第一个非空值填充,填充完成后第一列的所有值就是对应行的首个非空有效值
  • 该逻辑不受待合并列数量限制,无论同名列重复2次还是10次都可以正常运行
  • 如果某行的所有待合并列全为空值,合并后对应位置会保留NaN,符合常规数据处理预期

示例验证

用你给出的示例数据运行代码,得到的合并结果如下:

NumberNameCountry
1BobUSA
4NaNIndia
12JoeChina
6MattAustralia

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:06