Atualizar linhas de um dataframe com base em outras linhas de dataframe

Oct 02 2020

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

SandeepKothari Oct 02 2020 at 11:48

você pode usar update ... assim ..

df1.update(df2)
2 Dan Oct 02 2020 at 11:47

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()