如何基于匹配条件批量替换DataFrame列为另一DataFrame对应值?
高效替换DataFrame列值的解决方案
针对你需要批量替换cus中nationality_code列值为scores对应risk_weight的需求,推荐两种高效的批量处理方法,完全不需要逐个编写替换逻辑:
方法一:使用map()(最简洁)
先将scores转换为代码-风险权重的字典,再用map()批量映射:
# 从scores生成映射字典:key是code,value是risk_weight code_weight_map = scores.set_index('code')['risk_weight'].to_dict() # 批量替换nationality_code列 cus['nationality_code'] = cus['nationality_code'].map(code_weight_map)
- 如果
cus中存在scores里没有的国家代码,映射后会变成NaN。如果想保留原代码,可改用:
cus['nationality_code'] = cus['nationality_code'].map(code_weight_map).fillna(cus['nationality_code'])
方法二:使用merge()(更直观,适合需保留多列场景)
通过合并两个DataFrame来实现替换,逻辑更清晰:
# 合并两个DataFrame,按code和nationality_code匹配 merged_df = cus.merge(scores, left_on='nationality_code', right_on='code', how='left') # 用risk_weight替换原nationality_code列 cus['nationality_code'] = merged_df['risk_weight'] # 如果需要保留原代码应对缺失情况: # cus['nationality_code'] = merged_df['risk_weight'].fillna(merged_df['nationality_code']) # 可选:删除合并后新增的冗余列 merged_df.drop(['code', 'risk_weight'], axis=1, inplace=True)
这两种方法都能一次性处理所有国家代码,效率远高于手动编写mask语句,完全适配100+个代码的场景。
内容的提问来源于stack exchange,提问作者Andraws Santos
相关产品推荐
相关产品推荐

