Atualizar linhas de um dataframe com base em outras linhas de dataframe
Eu tenho dois dataframes e um dataframe maior precisa ser atualizado com base nos dados de um dataframe menor. Então, basicamente, se houver um registro com nomes correspondentes, desejo atualizar o preço no df1, como no exemplo abaixo. Pode haver várias linhas com o mesmo nome em 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
Estou muito preso. Tentei fazer isso com df.loc [], mas não cheguei a lugar nenhum. Alguma ideia?
Respostas
você pode usar update ... assim ..
df1.update(df2)
Você está tentando fazer várias correspondências um a um, mergepode ajudá-lo aqui:
df1.merge(df2, on="name", how="left").ffill(axis=1).drop("price_x", axis=1)
fazendo uma junção à esquerda, você mantém todos os valores em df1 que não têm correspondências em df2. O ffillentão faz a junção nula, onde você mantém a coluna mais não nula à direita.
Outra opção baseada na resposta de Sandeep:
df3 = df1.set_index("name")
df3.update(df2.set_index("name")).reset_index()