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

Python基于匹配条件用另一DataFrame值替换当前DataFrame列值

问题分析
  • 错误1:使用str.replace()执行子串替换,而非全值匹配。你在遍历到P_Rvr时会先把它替换为7,后续P_Rvr A-T、P_Rvr R两个值里的P_Rvr子串会被提前替换,等遍历到这两个值时,列内的值已经被修改,无法匹配到DF2的原始键,就出现了你实际输出里的7 A-T、7 R错误结果。
  • 错误2:替换逻辑和变量作用域错误。每轮外层循环结束后你都会对整列做一次全局替换,l1和l2只会保留内层循环最后一次匹配到的值,会进一步导致匹配错位、重复替换。
  • 错误3:双重循环的实现完全不符合Pandas的向量化操作逻辑,数据量稍大就会严重卡顿,效率极低。
解决方案

直接使用Pandas自带的映射方法实现全值匹配替换,一步即可得到预期结果:

import pandas as pd
    
data1 = [['P_ER SH M',  456 ,'ER SH M'],
    ['P_ER SH NE'   ,823    ,'ER SH NE'],
    ['P_Rvr'    ,346 ,  'Rvr'],
    ['P_Rvr A-T'    ,175    ,'Rvr A-T'],
    ['P_Rvr R', '446',  'Rvr R'],
    ['P_U ER Act'   ,'642'  ,'U ER Act']]
    
data2=[['P_U ER Act',   '4'],
    ['P_Rvr R'  ,'8'],
    ['P_Rvr A-T'    ,'9'],
    ['P_Rvr'    ,'7'],
    ['P_ER SH NE',  '13'],
    ['P_ER SH M'    ,'3']]
    
PRK_sourceT_sum_df=pd.DataFrame(data1,columns=['19-SOURCE','19-AMOUNT','19-SOURCE_PRK'])
Sourcedata_df=pd.DataFrame(data2,columns=['PRK Source Code','Fid seq Num'])

# 构造匹配映射字典,同时对键做去首尾空格处理,避免空格导致匹配失败
map_dict = dict(zip(
    Sourcedata_df['PRK Source Code'].str.strip(),
    Sourcedata_df['Fid seq Num'].str.strip()
))
# 对DF1的19-SOURCE列做全值匹配替换
PRK_sourceT_sum_df['19-SOURCE'] = PRK_sourceT_sum_df['19-SOURCE'].str.strip().map(map_dict)

# 输出查看结果
print(PRK_sourceT_sum_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:54:05