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

355
Vistas
¿Hay una variable de comparación ficticia en python y pandas?

Tengo un marco de datos df de la siguiente manera:

 C1 C2 C3 a1 ad b1 be c1 cf

Si hago df[df['C1'] == 'a1'] obtengo

 C1 C2 C3 a1 ad

¿Hay alguna forma de comparar cosas para que si hago df[df['C1'] == 'what should I use here'] , obtenga todas las filas? es decir, estoy buscando una variable de comparación ficticia para que se ignore la declaración de comparación y se devuelvan todas las filas.

 C1 C2 C3 a1 ad b1 be c1 cf

Editar: como el código está protegido, necesito usar solo la declaración de comparación == . No puedo usar != . La variable de comparación viene a través de un bucle for y puedo insertar una variable ficticia en el bucle for si está disponible.

Este es el código original que no puedo modificar:

 dfNew = [] for ii in ['a1', 'a2']: for jj in ['a', 'b']: dfNew.append(df[(df['C1'] == ii) & (df['C2'] == jj)])

Lo que estoy tratando de lograr en dfNew es también agregar valores donde si hubiera una variable ficticia en ['a1', 'a2', 'dummy'] entonces solo se realiza la otra operación de comparación. El número de columnas es cercano a 50, por lo que será imposible codificar cada par para ignorarlo en la operación condicional.

Edit2: ¿Cómo pasas el dummy dentro ['a1', 'a2', 'dummy'] ?

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

0

Cree una variable Dummy con una clase.

Si desea una variable __eq__ Dummy verificación de igualdad) siempre devuelva True :

 class Dummy: def __eq__(self, other): return True

Y ahora:

 >>> df[df['C1'] == Dummy()] C1 C2 C3 0 a1 ad 1 b1 be 2 c1 cf >>>

Siempre da True .

La clase Dummy devuelve True para todas las comprobaciones de igualdad.

Para la edición.

Solo haz:

 ['a1', 'a2', Dummy()]

Use unittest.mock.any que ya hace esto por nosotros.

El módulo unittest (módulo incorporado) ya hizo esta clase por nosotros. Podríamos usar eso también:

 from unittest.mock import ANY

Y ahora:

 >>> df[df['C1'] == ANY] C1 C2 C3 0 a1 ad 1 b1 be 2 c1 cf >>>

¡También funcionaría!

El código fuente de unittest.mock.ANY es exactamente el mismo que hice:

Obtener el código fuente de ANY :

 import inspect print(inspect.getsource(ANY.__class__))

Producción:

 class _ANY(object): "A helper object that compares equal to everything." def __eq__(self, other): return True def __ne__(self, other): return False def __repr__(self): return '<ANY>'

Es lo mismo que hice yo :).

over 4 years ago · Santiago Trujillo Denunciar

0

¿Por qué no esto?

 df[df['C1'] == df['C1']]

Eso funcionará para todos los valores excepto para NaN, porque NaN != NaN.

De hecho, debido a esa misma propiedad (quizás más precisa, definición ) de NaN, podría hacer esto (aunque el OP requería explícitamente únicamente el uso de == ):

 df[df['C1'] == np.nan]

(Pruebo eso y, como se esperaba, se devolvieron todas las filas, incluidas las de NaN).

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