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

Pandas如何依据另一DataFrame的映射关系替换指定列的对应值

实现方案

以下基于pandas实现,两种场景的代码均可直接运行:

单字段匹配(示例中ppid唯一匹配场景)

利用pandas的map方法实现,逻辑简单性能高:

import pandas as pd

# 构造示例数据
df_X = pd.DataFrame({
    'ppid': ['id1', 'id2', 'id3'],
    'col2': ['1', '2', '3']
})
df_map = pd.DataFrame({
    'ppid': ['id1', 'id2'],
    'val': ['5', '6']
})

# 1. 生成映射字典
val_map = df_map.set_index('ppid')['val']
# 2. 匹配替换,匹配不到的保留原值
df_X['col2'] = df_X['ppid'].map(val_map).fillna(df_X['col2'])

运行后df_X的结果和预期完全一致。

多列联合匹配场景

如果是多个列共同作为唯一匹配键,使用左连接merge实现更方便:

# 假设匹配键为 ppid + 其他列 col_key,示例演示
df_X = pd.DataFrame({
    'ppid': ['id1', 'id2', 'id3', 'id1'],
    'col_key': ['a', 'b', 'c', 'b'],
    'col2': ['1', '2', '3', '4']
})
df_map = pd.DataFrame({
    'ppid': ['id1', 'id2', 'id1'],
    'col_key': ['a', 'b', 'b'],
    'val': ['5', '6', '7']
})

# 1. 左连接匹配,on参数传入所有需要联合匹配的列名
merged = df_X.merge(df_map, on=['ppid', 'col_key'], how='left')
# 2. 替换col2,匹配不到的保留原值
merged['col2'] = merged['val'].fillna(merged['col2'])
# 3. 删除多余的val列,得到最终结果
df_X = merged.drop('val', axis=1)

注意事项

  • 匹配前需确保两个DataFrame中用于关联的键列数据类型完全一致,否则会出现匹配失败问题,比如字符串类型的'1'和整数类型的1会被判定为不相等
  • 若映射表中存在重复的关联键组合,需要提前做去重处理,避免左连接时出现行膨胀问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 00:24:04