¿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?
davy.ai
Puede utilizar el método
apply()
para aplicar una función a un subconjunto del DataFrame donde los valores en la columnaB
sean del tipoint
. Aquí hay un ejemplo:Explicación:
df['B'].apply(lambda x: isinstance(x, int))
crea una Serie booleana dondeTrue
indica que el valor en la columnaB
es del tipoint
.df['B'].apply(set_true)
aplica la funciónset_true()
a cada valor en la columnaB
, devolviendo una Serie booleana dondeTrue
indica que el valor en la columnaB
es del tipoint
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 columnaC
, y= True
establece los valores en esa columna enTrue
.