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

基于ID合并DataFrame,用标准名称替换目标DataFrame对应名称

Pandas 按ID批量替换名称并提取被替换项

需求说明

有两个包含id和name字段的DataFrame,其中df1数据量大于df2。需要基于id字段关联,用df2里的标准品牌名称替换df1中对应id的名称,同时找出df1里所有被替换过的原始名称。

示例数据

原始df1

import pandas as pd

df1 = pd.DataFrame({
    'id': [123, 124, 125, 126],
    'name': ['Del Monte', 'Pokmon', 'Pokmon', 'Pokmon']
}, index=[0, 154047, 171696, 69264])

输出展示:

index    id         name
0        123        Del Monte
154047   124        Pokmon
171696   125        Pokmon
69264    126        Pokmon

原始df2(标准名称表)

df2 = pd.DataFrame({
    'id': [124, 125],
    'name': ['Pokémon', 'Pokémon']
}, index=[79376, 135487])

输出展示:

index   name     id
79376   Pokémon  124        
135487  Pokémon  125        

处理步骤与代码

  1. 构建id到标准名称的映射字典
    把df2转换成以id为键、name为值的字典,方便快速匹配替换:
name_mapping = df2.set_index('id')['name'].to_dict()
  1. 保存原始名称(用于后续提取被替换项)
    在df1里新增一列original_name,先把原来的name值存起来:
df1['original_name'] = df1['name']
  1. 批量替换名称
    用map方法匹配id对应的标准名称,没有匹配到的id(比如示例里的123、126)保留原名称:
df1['name'] = df1['id'].map(name_mapping).fillna(df1['name'])
  1. 提取所有被替换的原始名称
    筛选出原始名称和替换后名称不一致的行,提取其中的原始名称并去重:
replaced_names = df1[df1['original_name'] != df1['name']]['original_name'].unique()

最终结果

替换后的df1

index    id         name        original_name
0        123        Del Monte   Del Monte
154047   124        Pokémon     Pokmon
171696   125        Pokémon     Pokmon
69264    126        Pokmon      Pokmon

如果不需要保留original_name列,直接用df1.drop('original_name', axis=1)删除即可。

被替换的原始名称

print(replaced_names)
# 输出:['Pokmon']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:35:15