Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Join em dois df diferentes

Olá, bom dia!

Preciso de uma ajuda, estou tentando unir dois df por uma coluna de condição. Por exemplo:

Df 1:
A        B        C        D
1        2        3        A
2        2        3        B
3        2        3        C

Df2:
E        F
1        2    
2        2        
3        2
4        2        

for index2, row2 in Df2.iterrows():
    for index1, row1 in Df1.iterrows():
        if row2['E'] == row1['A']:
            row2['new_column'] = row1['D'] 

Reusltado esperado:

Df2:
E        F        new_column
1        2            A    
2        2            B
3        2            C

Esse código funcionou antes mas agora não funciona mais e também demora muito tempo. Tem algum jeito melhor?

Agradeço!

1 resposta
solução!

Olá Erica, tudo bem ? Espero que sim.

Pensei nessa solução, me diga se ela funciona para você.

Utilizei o query para selecionar apenas as linhas que tem o mesmo valor na coluna E do Df2 e na coluna A do Df1.

selecao = Df2.query('E == @Df1.A').index

Dessa maneira a variável selecao vai guardar os índices das linhas que temos interesse.

Com isso podemos selecionar as linhas que temos interesse no Df1 coluna D , optei por utilizar o iloc.

selecao = Df2.query('E == @Df1.A').index
Df2['new_column'] = Df1.D.iloc[selecao]

Segui a sua orientação e salvei esse resultado em uma nova coluna no Df2, chamada de new_column.

Já que teremos valor Nan nas linhas que não foram selecionadas, devemos utilizar o dropna para retirar esses linhas.

selecao = Df2.query('E == @Df1.A').index
Df2['new_column'] = Df1.D.iloc[selecao]
Df2.dropna(inplace=True)
Df2

Me diz se é esse o resultado que você gostaria e se conseguiu entender cada etapa, qualquer duvida não hesite em perguntar.

Bons Estudos : )