我有两个像这样的数据帧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]
答案 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