pandas如何提取相似列中非NaN值合并为对应统一字段列
Pandas 合并同类型带_x/_y后缀字段的实现方案
核心思路
对每个字段的_x、_y两个版本,按行取非NaN值合并,Pandas内置方法可以非常简洁的实现这个需求,两种常用实现方式如下:
方式1:combine_first实现(适合仅两组后缀的场景)
该方法逻辑明确,优先取_x列的值,_x列为空时自动取_y列的非空值填充,完全匹配你的需求:
import pandas as pd # 定义需要合并的字段前缀列表 merge_fields = ["countrycode", "statename", "statecode"] # 遍历逐个合并字段 for field in merge_fields: # combine_first会自动用第二个列的非空值填充第一个列的空值 df[field] = df[f"{field}_x"].combine_first(df[f"{field}_y"]) # 过滤保留合并后的三个新字段,删除原始带后缀字段 result_df = df[merge_fields]
如果需求是优先取_y列的值,调整为df[f"{field}_y"].combine_first(df[f"{field}_x"])即可。
方式2:列分组实现(适合多后缀的通用场景)
如果后续后缀不止_x/_y两种,用列分组按前缀聚合的方式扩展性更强:
# 按列名的前缀(下划线前的部分)分组,每组按行取第一个非空值 result_df = df.groupby(lambda col_name: col_name.split("_")[0], axis=1).first() # 按需要的字段顺序调整即可 result_df = result_df[["countrycode", "statename", "statecode"]]
两种方法运行后得到的result_df就是你给出的预期输出结果。
内容的提问来源于stack exchange,提问作者janicebaratheon
相关产品推荐
相关产品推荐

