如何在DataFrame中匹配值并将对应字段赋值到另一DataFrame
需求实现方案(基于Python Pandas)
该需求的核心是将df2中分散在多列的匹配值整理为统一的映射关系,再和df1的指定列关联赋值,具体实现如下:
- 重构df2生成映射表
将df2中用于匹配的nr1/nr2/nr3列转换为单列,保留对应的code值,生成「匹配值-编码」的一对一映射表,避免多列匹配的复杂逻辑。 - 关联匹配赋值
将df1的contract-nr.列和映射表的匹配值做左连接,将匹配到的code值赋值给df1的ID列即可。
完整可运行代码
import pandas as pd # 构造示例数据 df1 = pd.DataFrame({ 'ID': ['+', '+', '+'], 'contract-nr.': ['bc7', 'bx9', 'df4'] }) df2 = pd.DataFrame({ 'code': [1133, 1222, 1456], 'nr1': ['k2f', 'df4', 'rs6'], 'nr2': ['bx9', 'gp7', 'ks0'], 'nr3': ['h3d', 'kl9', 'bc7'] }) # 生成df2映射表 df2_map = df2.melt( id_vars='code', value_vars=['nr1', 'nr2', 'nr3'], value_name='match_val' )[['code', 'match_val']].drop_duplicates() # 匹配赋值 df1 = df1.merge(df2_map, left_on='contract-nr.', right_on='match_val', how='left') df1['ID'] = df1['code'] df1 = df1[['ID', 'contract-nr.']] # 输出结果 print(df1)
运行结果
ID contract-nr. 0 1456 bc7 1 1133 bx9 2 1222 df4
如果存在contract-nr.在df2中匹配不到的情况,对应ID会赋值为NaN,可根据需要用fillna方法填充默认值。
内容的提问来源于stack exchange,提问作者Hai Dinh
相关产品推荐
相关产品推荐

