Como faço para comparar colunas em diferentes quadros de dados?

23

Gostaria de comparar uma coluna de um df com outros df's. As colunas são nomes e sobrenomes. Eu gostaria de verificar se uma pessoa em um quadro de dados está em outro.

a_a_a
fonte
Você poderia indicar como deseja que o resultado seja? É um df com nomes aparecendo nos dois dfs, e se você também precisa de mais alguma coisa, como contagem ou coluna correspondente no df2, etc. Obrigado!
O Lirista
Você pode unir os dois quadros de dados nas colunas de seu interesse e verificar se o número de linhas no resultado é positivo.
dsaxton
Para sua informação, comparar o nome e o sobrenome em qualquer conjunto decentemente grande de nomes terminará com dor - muitas pessoas têm o mesmo nome!
22618 Ken Syme

Respostas:

22

Se você deseja verificar valores iguais em uma determinada coluna, digamos Nome, você pode mesclar os dois Dataframes a um novo:

mergedStuff = pd.merge(df1, df2, on=['Name'], how='inner')
mergedStuff.head()

Eu acho que isso é mais eficiente e mais rápido do que wherese você tiver um grande conjunto de dados

Tarek
fonte
1
Acho que queremos usar uma junção interna aqui e depois verificar sua forma.
dsaxton
10
df1.where(df1.values==df2.values).notna()

Trueentradas mostram elementos comuns. Isso também revela a posição dos elementos comuns, ao contrário da solução com merge.

pcko1
fonte
qual é a df.sua resposta? Existem apenas df1e df2mas nãodf
LearneR
3

Comparando valores em duas colunas diferentes

Usando set, obtenha valores exclusivos em cada coluna. A interseção desses dois conjuntos fornecerá os valores exclusivos nas duas colunas.

Exemplo:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]}) df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]}) set(df1['c2']).intersection(set(df2['c2']))

Saída: {2, 5}


Comparando nomes de colunas de dois quadros de dados

Caso você esteja tentando comparar os nomes de colunas de dois quadros de dados:

Se df1e df2são os dois quadros de dados: set(df1.columns).intersection(set(df2.columns))

Isso fornecerá os nomes de colunas exclusivos que estão contidos nos dois quadros de dados.

Exemplo:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]})
df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]})

set(df1.columns).intersection(set(df2.columns))

Saída: {'c2', 'c3'}

aathiraks
fonte
Eu acho que a pergunta é sobre comparar os valores em duas colunas diferentes em diferentes quadros de dados, pois a pessoa que pergunta quer verificar se uma pessoa em um quadro de dados está em outro.
Divyanshu Shekhar
Obrigado, entendi errado a pergunta. Atualizei a resposta agora.
aathiraks
1

Você pode verificar o número exato de posições comuns e diferentes entre dois df usando isin e value_counts ()

Curtiu isso:

df['your_column_name'].isin(df2['your_column_name']).value_counts()

Resultado:

exemplo isin

Verdadeiro = comum Falso = diferente

Kuba S
fonte
0

Observe que as colunas dos quadros de dados são séries de dados. Portanto, se você usar duas colunas como séries de pandas, poderá compará-las como faria com matrizes numpy.

Timur
fonte