遍历同数据集同名列提取首个非空值生成新列的实现咨询
解决方案
你可以直接遍历你生成的列映射字典,用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,符合常规数据处理预期
示例验证
用你给出的示例数据运行代码,得到的合并结果如下:
| Number | Name | Country |
|---|---|---|
| 1 | Bob | USA |
| 4 | NaN | India |
| 12 | Joe | China |
| 6 | Matt | Australia |
内容的提问来源于stack exchange,提问作者thatwayeasy33
相关产品推荐
相关产品推荐

