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

如何基于另一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)

逻辑说明

  1. 合并匹配:通过merge方法,以V3(df2)和C3(df1)作为匹配键,采用left连接确保只保留df2中的目标行;
  2. 列映射替换:直接提取df1的C1替换原V1的空值,提取C2替换原V2的值,保留V3作为结果的M3列;
  3. 结果一致性:运行代码后输出的结果与需求示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:10:32