Pandas合并DataFrame时主键缺失如何使用备选键匹配?
解决方案
可以通过构造优先级匹配键的方式实现需求,步骤简洁清晰:
- 给df1新增临时匹配键
match_key:优先使用key1,当key1不在df2的key2集合中时,自动替换为alternative_key - 基于临时键与df2的
key2做左连接,最后删除临时键即可
完整实现代码
import pandas as pd a = {'key1': ['a','b','c'], 'alternative_key':['f','g','h']} df1 = pd.DataFrame(data=a) b = {'key2':['a','b','h'], 'some_stuff': [1,2,3]} df2 = pd.DataFrame(data=b) # 构造优先级匹配键 df1['match_key'] = df1['key1'].where(df1['key1'].isin(df2['key2']), df1['alternative_key']) # 执行合并并清理临时列 df_final = df1.merge(df2, left_on='match_key', right_on='key2', how='left').drop(['match_key', 'key2'], axis=1) print(df_final)
输出结果
key1 alternative_key some_stuff 0 a f 1 1 b g 2 2 c h 3
备选方案(两次合并填充)
如果偏好分步处理,也可以通过两次merge后填充缺失值实现,逻辑更直观但代码稍长:
# 第一次用key1匹配 df_temp = df1.merge(df2, left_on='key1', right_on='key2', how='left') # 第二次用alternative_key匹配补充缺失值 df_final = df_temp.merge(df2, left_on='alternative_key', right_on='key2', how='left', suffixes=('', '_alt')) # 填充缺失的some_stuff df_final['some_stuff'] = df_final['some_stuff'].fillna(df_final['some_stuff_alt']) # 清理冗余列 df_final = df_final.drop(['key2', 'key2_alt', 'some_stuff_alt'], axis=1)
内容的提问来源于stack exchange,提问作者ZetDen
相关产品推荐
相关产品推荐

