Skip to main content
 首页 » 编程设计

python之匹配 2 个数据集之间列中的值,更新多个列

2025年05月04日13pengyingh

我有两个数据框:

df1 
     A   B     id col1 col2 col3  
0   E1  E2     0   NaN  NaN  NaN 
1   E1  E3     1   NaN  NaN  NaN 
2   E1  E4     2   NaN  NaN  NaN  
3   E2  E1     3   NaN  NaN  NaN 
4   E1  E4     4   NaN  NaN  NaN 
5   E2  E1     5   NaN  NaN  NaN 
 
df2 
     A   B     id col1 col2 col3  
0   E1  E2     3     1    0    1 
1   E1  E3     5     0    1    1 

我想更新 df1 中的 col1、col2、col3 中的值df2通过匹配id得到:

df3 
     A   B     id col1 col2 col3  
0   E1  E2     0   NaN  NaN  NaN 
1   E1  E3     1   NaN  NaN  NaN 
2   E1  E4     2   NaN  NaN  NaN  
3   E2  E1     3     1    0    1 
4   E1  E4     4   NaN  NaN  NaN 
5   E2  E1     5     0    1    1 

由于我的实际数据框要大得多,所以我想使用要更新的列名列表:

add = ['col1', 'col2', 'col3'] 

如何使用此列名来获得所需的结果?

我提到了 this question和 this question这指示我使用 .loc 但我无法弄清楚如何合并对索引的引用和多列列表:

df1.loc[df1['edge_id'] == df2['edge_id'], add] = df2[add] 

显然这没有用...

请您参考如下方法:

使用combine_first :

df1[add] = df1.set_index('id')[add].combine_first(df2.set_index('id')[add]).values 
print (df1) 
    A   B  id  col1  col2  col3 
0  E1  E2   0   NaN   NaN   NaN 
1  E1  E3   1   NaN   NaN   NaN 
2  E1  E4   2   NaN   NaN   NaN 
3  E2  E1   3   1.0   0.0   1.0 
4  E1  E4   4   NaN   NaN   NaN 
5  E2  E1   5   0.0   1.0   1.0