如何基于匹配条件在Pandas的不同DataFrame间映射对应值
Pandas两表匹配编码对应姓名解决方案
原代码报错原因
on参数错误传入了列表变量codes1,而非DataFrame的列名,且两个待匹配表的关联列命名不一致(df1为codes1,df2为codes2),无法直接通过on参数指定关联字段- 关联方式错误选择了
outer外连接,会额外保留df2独有的行,不符合保留全部df1行的需求
推荐实现方法
方法1:merge实现(适合常规规模数据集)
# 分别指定左右表的关联列,用左连接保留df1全部行 res = df1.merge(df2, left_on='codes1', right_on='codes2', how='left') # 移除冗余的codes2列,空值替换为空字符串 res = res.drop(columns=['codes2']).fillna('')
方法2:map映射实现(更适合超大数据集,性能更高)
将df2转换为编码-姓名的映射字典后直接匹配,无需做表连接运算,内存占用和运算速度都远优于merge,适合超大数据场景:
# 生成编码到姓名的映射字典 code_map = df2.set_index('codes2')['names'].to_dict() # 对df1的编码列做映射,空值填充为空字符串 df1['names'] = df1['codes1'].map(code_map).fillna('')
运行后df1就是你需要的结果。
内容的提问来源于stack exchange,提问作者stanvooz
相关产品推荐
相关产品推荐

