如何基于另一DataFrame匹配列值替换空值及指定列内容
解决方案
问题背景
现有两个DataFrame df1 和 df2,需基于C3(df1)与V3(df2)的匹配关系,完成两个操作:用df1的C1替换df2中V1的空值,用df1的C2替换df2的V2列,最终生成指定结构的结果DataFrame。
代码实现
import pandas as pd # 初始化原始DataFrame df1 = pd.DataFrame({ 'C1': ['xr', 'we', 'r5', 'by', 'v4', 'c0', 'ba', 'mi', 'lp'], 'C2': [1, 5, 7, 8, 4, 0, 2, 1, 7], 'C3': ['ixfg', 'jsfd', 'hfga', 'srjs', 'qwks', 'khfd', 'gdbu', 'pdlo', 'ztpq'] }) df2 = pd.DataFrame({ 'V1': [pd.NA]*6, 'V2': [6, 2, 2, 7, 1, 9], 'V3': ['ixfg', 'jsfd', 'hfga', 'qwks', 'khfd', 'gdbu'] }) # 按匹配键合并,保留df2的所有行 merged = df2.merge(df1, left_on='V3', right_on='C3', how='left') # 构造结果DataFrame并指定列名 result = pd.DataFrame({ 'M1': merged['C1'], 'M2': merged['C2'], 'M3': merged['V3'] }) print(result)
逻辑说明
- 合并匹配:通过
merge方法,以V3(df2)和C3(df1)作为匹配键,采用left连接确保只保留df2中的目标行; - 列映射替换:直接提取df1的
C1替换原V1的空值,提取C2替换原V2的值,保留V3作为结果的M3列; - 结果一致性:运行代码后输出的结果与需求示例完全一致。
内容的提问来源于stack exchange,提问作者Gravity Boy
相关产品推荐
相关产品推荐

