es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pandas: encuentra filas coincidentes en dos dataframes (sin usar `merge`)

Supongamos que tengo estos dos dataframes con el mismo número de columnas, pero posiblemente diferentes número de filas:

tmp = np.arange(0,12).reshape((4,3))
df = pd.DataFrame(data=tmp) 

tmp2 = {'a':[3,100,101], 'b':[4,4,100], 'c':[5,100,3]}
df2 = pd.DataFrame(data=tmp2)

print(df)
   0   1   2
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11

print(df2)
     a    b    c
0    3    4    5
1  100    4  100
2  101  100    3

Quiero verificar si las filas de df2 coinciden con alguna de las filas de df, es decir, quiero obtener una serie (o un arreglo) de valores booleanos que den este resultado:

0     True
1    False
2    False
dtype: bool

Creo que algo como el método isin debería funcionar, pero obtengo este resultado, que es incorrecto ya que resulta en un dataframe:

print(df2.isin(df))
       a      b      c
0  False  False  False
1  False  False  False
2  False  False  False

Como restricción, deseo evitar utilizar el método merge, ya que lo que estoy haciendo es en realidad una comprobación de los datos antes de aplicar el propio merge.
¡Gracias por tu ayuda!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para verificar si las filas de df2 coinciden con alguna fila de df, podemos utilizar el método isin() junto con el método all(). Primero, necesitamos crear un nuevo dataframe df3 que tenga la misma forma que df2, pero que contenga solo valores True. Luego, podemos utilizar el método isin() para verificar si cada fila de df2 está en df y finalmente utilizar el método all() para verificar si todos los valores en cada fila del dataframe resultante son True. Aquí está el código:

    df3 = pd.DataFrame(True, index=df2.index, columns=df.columns)
    result = df3.isin(df).all(axis=1)
    print(result)
    

    Esto imprimirá el siguiente resultado:

    0     True
    1    False
    2    False
    dtype: bool
    

    La serie resultante contiene los valores booleanos esperados para cada fila de df2.

Comments are closed.