¿Cómo comparo columnas en diferentes marcos de datos?

23

Me gustaría comparar una columna de un df con otras df. Las columnas son nombres y apellidos. Me gustaría comprobar si una persona en un marco de datos está en otro.

a_a_a
fuente
¿Podría indicar cómo desea que se vea el resultado? ¿Es un df con nombres que aparecen en ambos dfs, y si también necesita algo más, como conteo o columna coincidente en df2, etc. ¡Gracias!
The Lyrist
Puede unir internamente los dos marcos de datos en las columnas que le interesan y verificar si el número de filas en el resultado es positivo.
dsaxton
Para su información, comparar el nombre y el apellido en cualquier conjunto de nombres bastante grande terminará con dolor, ¡muchas personas tienen el mismo nombre!
Ken Syme

Respuestas:

22

Si desea verificar valores iguales en una determinada columna, digamos Nombre, puede combinar ambos Dataframes en uno nuevo:

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

Creo que esto es más eficiente y más rápido que wheresi tienes un gran conjunto de datos

Tarek
fuente
1
Creo que queremos usar una unión interna aquí y luego verificar su forma.
dsaxton
10
df1.where(df1.values==df2.values).notna()

TrueLas entradas muestran elementos comunes. Esto también revela la posición de los elementos comunes, a diferencia de la solución con merge.

pcko1
fuente
¿Qué hay df.en tu respuesta? Hay solamente df1y df2, pero nodf
Learner
3

Comparar valores en dos columnas diferentes

Usando set, obtenga valores únicos en cada columna. La intersección de estos dos conjuntos proporcionará los valores únicos en ambas columnas.

Ejemplo:

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']))

Salida: {2, 5}


Comparación de nombres de columna de dos marcos de datos

En caso de que esté tratando de comparar los nombres de columna de dos marcos de datos:

Si df1y df2son los dos marcos de datos: set(df1.columns).intersection(set(df2.columns))

Esto proporcionará los nombres de columna únicos que están contenidos en ambos marcos de datos.

Ejemplo:

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))

Salida: {'c2', 'c3'}

aathiraks
fuente
Creo que la pregunta se trata de comparar los valores en dos columnas diferentes en marcos de datos diferentes, ya que la persona que pregunta quiere verificar si una persona en un marco de datos está en otro.
Divyanshu Shekhar
Gracias, me equivoqué de pregunta. He actualizado la respuesta ahora.
aathiraks
1

Puede hacer doble comprobar el número exacto de posiciones comunes y diferentes entre dos df utilizando isin y value_counts ()

Como eso:

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

Resultado:

ejemplo isin

Verdadero = común Falso = diferente

Kuba S
fuente
0

Tenga en cuenta que las columnas de los marcos de datos son series de datos. Entonces, si toma dos columnas como series de pandas, puede compararlas tal como lo haría con matrices numpy.

Timur
fuente