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

171
Vistas
Compruebe si la cadena está en otra columna pandas

Abajo está mi DF

 df= pd.DataFrame({'col1': ['[7]', '[30]', '[0]', '[7]'], 'col2': ['[0%, 7%]', '[30%]', '[30%, 7%]', '[7%]']}) col1 col2 [7] [0%, 7%] [30] [30%] [0] [30%, 7%] [7] [7%]

El objetivo es verificar si el valor de col1 está contenido en col2 a continuación, es lo que he intentado

 df['test'] = df.apply(lambda x: str(x.col1) in str(x.col2), axis=1)

A continuación se muestra la salida esperada

 col1 col2 col3 [7] [0%, 7%] True [30] [30%] True [0] [30%, 7%] False [7] [7%] True
over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

Use Series.str.extractall para obtener números, remodele con Series.unstack , para que sea posible comparar con DataFrame.isin con DataFrame.any :

 df['test'] = (df['col2'].str.extractall('(\d+)')[0].unstack() .isin(df['col1'].str.strip('[]')) .any(axis=1)) print (df) col1 col2 test 0 [7] [0%, 7%] True 1 [30] [30%] True 2 [0] [30%, 7%] False 3 [7] [7%] True
over 4 years ago · Santiago Trujillo Denunciar

0

Puede extraer los números en ambas columnas y join , luego verifique si hay al menos una coincidencia por identificación usando eval + groupby + any :

 (df['col2'].str.extractall('(?P<col2>\d+)').droplevel(1) .join(df['col1'].str[1:-1]) .eval('col2 == col1') .groupby(level=0).any() )

producción:

 0 True 1 True 2 False 3 True
over 4 years ago · Santiago Trujillo Denunciar

0

Una aproximación:

 import ast # convert to integer list col2_lst = df["col2"].str.replace("%", "").apply(ast.literal_eval) # check list containment df["col3"] = [all(bi in a for bi in b) for a, b in zip(col2_lst, df["col1"].apply( ast.literal_eval)) ] print(df)

Producción

 col1 col2 col3 0 [7] [0%, 7%] True 1 [30] [30%] True 2 [0] [30%, 7%] False 3 [7] [7%] True
over 4 years ago · Santiago Trujillo Denunciar

0

También puede reemplazar los corchetes con límites de palabras \b y usar re.search como en

 import re #... df.apply(lambda x: bool(re.search(x['col1'].replace("[",r"\b").replace("]",r"\b"), x['col2'])), axis=1) # => 0 True # 1 True # 2 False # 3 True # dtype: bool

Esto funcionará porque \b7\b encontrará una coincidencia en [0%, 7%] ya que 7 no va precedido ni seguido de letras, dígitos o guiones bajos. No se encontrará ninguna coincidencia en [30%, 7%] ya que \b0\b no coincide con un cero después de un dígito (aquí, 3 ).

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