Oi! Estou precisando comparar dois dataframes e retirar, do df_1, os itens que ele tenha em comum com o meu df_2. Sabem me indicar alguma função de pandas para me ajudar? Obrigada!
Oi! Estou precisando comparar dois dataframes e retirar, do df_1, os itens que ele tenha em comum com o meu df_2. Sabem me indicar alguma função de pandas para me ajudar? Obrigada!
Olá Clara, tudo bem com você?
Peço desculpas pela demora em obter um retorno.
Para comparar dois DataFrames e remover os itens que estão em comum com o segundo DataFrame do primeiro, você pode usar a função merge
em conjunto com o tipo de junção, neste caso, será à esquerda, o que significa que todas as linhas do df_1
serão mantidas, e também as linhas do df_2
que tinham correspondência com o df_1
.
Abaixo, um exemplo em código:
import pandas as pd
df_1 = pd.DataFrame({'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8]})
df_2 = pd.DataFrame({'A': [2, 4],
'B': [6, 8]})
# Realiza uma mesclagem (merge) dos DataFrames usando a função merge
result = df_1.merge(df_2, on=['A', 'B'], how='left', indicator=True).query('_merge == "left_only"').drop('_merge', axis=1)
# O DataFrame "result" agora contém os itens de df_1 que não estão em df_2
result
Resultado:
No código acima, usando a função merge
para combinar os DataFrames df_1
e df_2
com base nas colunas "A" e "B". A opção how='left'
indica que queremos manter todas as linhas do df_1
e apenas as linhas que têm correspondência no df_2
. O parâmetro indicator=True
adiciona uma coluna especial _merge
ao DataFrame resultante, que identifica de qual DataFrame
original cada linha veio:
Já a função query
é usada para selecionar apenas as linhas em que _merge
é igual a "left_only"
, ou seja, as linhas que estão presentes apenas no df_1
. O drop
é utilizado para remover a coluna _merge
do resultado, deixando apenas as linhas que você deseja no DataFrame final, ou seja, que contém os itens do df_1
que não estão em df_2
.
Caso queira se aprofundar na função merge, recomendo a leitura deste artigo que está em inglês, mas, ao utilizar o recurso de tradução do próprio navegador, é possível compreender. Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.
Espero ter ajudado.
Abraços e bons estudos!