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.

¿Cómo evaluar condiciones consecutivas en Pandas .loc?

Tengo un DataFrame de Pandas donde la columna B contiene tipos mixtos.

    A   B   C
0   1   1   False
1   2   abc False
2   3   2   False
3   4   3   False
4   5   b   False

Quiero modificar la columna C para que sea Verdadera cuando el valor en la columna B sea del tipo int y también tenga un valor mayor o igual a 3. Entonces, en este ejemplo, df['B'][3] debería cumplir esta condición.

Intenté hacer esto:

df.loc[(df['B'].astype(str).str.isdigit()) & (df['B'] >= 3)] = True

Sin embargo, obtengo el siguiente error debido a los valores str dentro de la columna B:

TypeError: ‘>’no es compatible entre instancias de ‘str’ y ‘int’

Si puedo probar solo la segunda condición en el subconjunto proporcionado después de la primera condición, esto resolvería mi problema. ¿Qué puedo hacer para lograr esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el método apply() para aplicar una función a un subconjunto del DataFrame donde los valores en la columna B sean del tipo int. Aquí hay un ejemplo:

    def set_true(x):
        if isinstance(x, int) and x >= 3:
            return True
        else:
            return False
    
    df.loc[df['B'].apply(lambda x: isinstance(x, int)) & df['B'].apply(set_true), 'C'] = True
    

    Explicación:

    • df['B'].apply(lambda x: isinstance(x, int)) crea una Serie booleana donde True indica que el valor en la columna B es del tipo int.
    • df['B'].apply(set_true) aplica la función set_true() a cada valor en la columna B, devolviendo una Serie booleana donde True indica que el valor en la columna B es del tipo int y también es mayor o igual a 3.
    • df.loc[] selecciona el subconjunto del DataFrame donde ambas condiciones son verdaderas. El método .loc le permite seleccionar filas y columnas por etiqueta, y el indexador .loc[] toma dos argumentos: la fila (o filas) a seleccionar y la columna (o columnas) a seleccionar.
    • 'C' selecciona la columna C, y = True establece los valores en esa columna en True.

Comments are closed.