Python 基于与其他数据帧的匹配更新数据帧新列

Python 基于与其他数据帧的匹配更新数据帧新列,python,pandas,Python,Pandas,我有两个数据帧df1,df2,如下所示: df1:UID是唯一的 UID STATE 123 WB 456 GH 789 TY 156 OU df2:UID可以重复 UID TYPE GENR STATE 123 TYP1 G1 156 TYP6 G5 456 TYP3 G6 789 TYP4 G7 156 TYP1 G3 789 TYP5 G7 123 TYP2 G3 现在,我想根据df1中的匹配更新df2中

我有两个数据帧df1,df2,如下所示: df1:UID是唯一的

UID STATE
123 WB
456 GH
789 TY
156 OU
df2:UID可以重复

UID TYPE    GENR    STATE
123 TYP1    G1  
156 TYP6    G5  
456 TYP3    G6  
789 TYP4    G7  
156 TYP1    G3  
789 TYP5    G7  
123 TYP2    G3  
现在,我想根据df1中的匹配更新df2中的列“STATE”。 df2:

如何以最有效的方式实现这一点?我试过这个,但它花了2200万张唱片太多的时间

dict_uid_state = dict(zip(df1.UID,df1.STATE))
df2.loc["STATE"] = " "
for each_uid in dict_uid_state:
    query_index = df_input.query('UID == @each_uid',engine='python').index
    df2.loc[query_index, "STATE"] = dict_uid_state[each_uid]
可以使用左键根据
UID
列值合并/连接两个数据帧

试试这个:

df2 = df2[["UID", "TYPE", "GENR"]].merge(df1, on="UID", how="left")
>>> print(df2)

  UID  TYPE GENR STATE
0  123  TYP1   G1    WB
1  156  TYP6   G5    OU
2  456  TYP3   G6    GH
3  789  TYP4   G7    TY
4  156  TYP1   G3    OU
5  789  TYP5   G7    TY
6  123  TYP2   G3    WB
输出:

df2 = df2[["UID", "TYPE", "GENR"]].merge(df1, on="UID", how="left")
>>> print(df2)

  UID  TYPE GENR STATE
0  123  TYP1   G1    WB
1  156  TYP6   G5    OU
2  456  TYP3   G6    GH
3  789  TYP4   G7    TY
4  156  TYP1   G3    OU
5  789  TYP5   G7    TY
6  123  TYP2   G3    WB

@是的。最好在此处关闭并添加带有解决方案的注释