Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda