1
resposta

[Dúvida] Excluir as linhas de um dataframe que estejam presentes em outro dataframe

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!

1 resposta

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:

Imagem contendo o resultado da execução do código acima.

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:

Imagem apresentando o DataFrame criado com a coluna _merge

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!