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.


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


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.


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'}


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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.