Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

219
Vistas
Comprobando si los elementos en una matriz existen en un DataFrame de pandas

Tengo un marco de datos de pandas y una serie de pandas que se ve a continuación.

 df0 = pd.DataFrame({'col1':['a','b','c','d'],'col2':['b','c','e','f'],'col3':['d','f','g','a']}) col1 col2 col3 0 abd 1 bcf 2 ceg 3 dfa df1 = pd.Series(['b','g','g'], index=['col1','col2','col3']) col1 b col2 g col3 g dtype: object

Como puede ver, las columnas de df0 y los índices de df1 son los mismos. Para cada índice de df1 , quiero saber si el valor de ese índice existe en la columna correspondiente de df0 . Entonces, df1.col1 es b y necesitamos buscar b solo en df0.col1 y verificar si existe.

Salida deseada:

 array([True, False, True])

¿Hay alguna manera de hacer esto sin usar un bucle? ¿Quizás un método nativo de numpy o pandas?

over 4 years ago · Santiago Trujillo
6 Respuestas
Responde la pregunta

0

Si desea un trazador de líneas rápido usando la comprensión de lista:

[df1[i] in df0[i].unique() for i in df1.index]

Y si necesita ser una matriz:

np.array([df1[i] in df0[i].unique() for i in df1.index])

La salida es:

array([ True, False, True])

over 4 years ago · Santiago Trujillo Denunciar

0

Usando numpy

Puede transmitir df1 para verificar con df0 :

 np.any(df1[None, :] == df0, axis=0) # col1 True # col2 False # col3 True # dtype: bool

Tenga en cuenta que esto supone que df1.index y df0.columns tienen el mismo orden. Si no, reindex primero:

 np.any(df1.reindex(df0.columns)[None, :] == df0, axis=0)

usando pandas

Use apply para verificar si un valor df1 dado df0 en la col correspondiente de isin :

 df0.apply(lambda col: col.isin([df1[col.name]])).any() # col1 True # col2 False # col3 True # dtype: bool
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar apply en lugar de loop .

Prueba esto:

 df0 = pd.DataFrame({'col1':['a','b','c','d'],'col2':['b','c','e','f'],'col3':['d','f','g','a']}) df1 = pd.Series(['b','g','g'], index=['col1','col2','col3']) df0.apply(lambda x : df1[x.name] in x.values) # for example x <-> 'col1' check this -> 'b' in ['a','b','c','d'] # col1 True <-> 'b' in ['a','b','c','d'] # col2 False <-> 'g' in ['b','c','e','f'] # col3 True <-> 'g' in ['d','f','g','a'] # dtype: bool df0.apply(lambda x : df1[x.name] in x.values).tolist() # [True, False, True]
over 4 years ago · Santiago Trujillo Denunciar

0

import pandas as pd array=[] df0 = pd.DataFrame({'col1':['a','b','c','d'],'col2':['b','c','e','f'],'col3':['d','f','g','a']}) df1 = pd.Series(['b','g','g'], index=['col1','col2','col3']) for i in range(1,4): col = 'col'+str(i) array.append(df0[col].str.contains(df1[col]).any()) print(array)
over 4 years ago · Santiago Trujillo Denunciar

0

El método pandas.DataFrame.eq de Pandas es probablemente el más simple.

 df0.eq(df1).any() col1 True col2 False col3 True dtype: bool
over 4 years ago · Santiago Trujillo Denunciar

0

Puede hacer uso de la transmisión :

 (df0 == df1).any().values

También funciona con NumPy ndarrays:

 assert (df0.columns == df1.columns).all() (df0.values == df1.values).any(axis=0)

Producción:

 array([ True, False, True])
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda