根据另一个数据框行更新一个数据框行

时间:2020-10-02 11:31:54

标签: python pandas dataframe

我有两个数据框,一个较大的数据框需要根据较小数据框中的数据进行更新。因此,基本上,如果有匹配名称的记录,我想在df1中更新价格,如下面的示例所示。 df1中可能有多行同名

df1

id name price 

1 name_1 5,34 

2 name_2 5,36 

3 name_3 4,74 

4 name_4 5,23 

5 name_5 5,94 

6 name_1 5,34 

df2

name price 

name_4 5,17 

name_1 5,37

df_result

id name price 

1 name_1 5,37 

2 name_2 5,36 

3 name_3 4,74 

4 name_4 5,17 

5 name_5 5,94 

6 name_1 5,37

我很困。试图用df.loc []做到这一点,但我一无所获。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您正在尝试进行多个一对一匹配,merge可以在这里为您提供帮助:

df1.merge(df2, on="name", how="left").ffill(axis=1).drop("price_x", axis=1)

通过左连接,可以将df2中没有匹配项的所有值保留在df1中。然后ffill进行空合并,在此保留最右边的非空列。


基于Sandeep答案的另一种选择:

df3 = df1.set_index("name")
df3.update(df2.set_index("name")).reset_index()

答案 1 :(得分:0)

您可以像这样使用update ..

df1.update(df2)