根据与其他数据框的匹配更新数据框新列

时间:2020-04-02 04:24:43

标签: 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中的“ STATE”列。 df2:

UID TYPE    GENR    STATE
123 TYP1    G1      WB
156 TYP6    G5      OU
456 TYP3    G6      GH
789 TYP4    G7      TY
156 TYP1    G3      OU
789 TYP5    G7      TY
123 TYP2    G3      WB

如何以最有效的方式实现这一目标?我尝试过此操作,但它花费了太多时间进行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]

1 个答案:

答案 0 :(得分:1)

您可以使用df.merge来基于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