¿Cómo puedo modificar la función apply y lambda para crear una nueva columna basada en otra en Python Pandas?
Tengo una tabla como la siguiente en Python Pandas con el tipo de dato float64:
col1
--------
245.121
NaN
44.908
Y trato de crear una nueva columna “col2” usando el siguiente código:
data["col2"] = data.apply(lambda x: 1 if x.col1 == np.nan else 0, axis=1)
Desafortunadamente, cuando uso el código anterior, obtengo 0 en todas partes, ¿por qué? ¿Cómo puedo modificar mi código para lograr algo como esto:
col1 col2
--------
245.121 | 0
NaN | 1
44.908 | 0
¿Cómo puedo hacer eso en Python Pandas?
davy.ai
La razón por la salida inesperada es que los valores NaN no se pueden comparar con los operadores de igualdad “==” o “!=” en Python. Por lo tanto, el código “x.col1==np.nan” siempre dará como resultado False, y la función lambda devuelve 0 para todas las filas.
Para obtener la salida deseada, puedes modificar el código de la siguiente manera:
Aquí, utilizamos el método “apply” en la columna “col1” para aplicar la función lambda a cada valor por separado. Comprobamos si el valor es NaN utilizando el método “pd.isna”, que devuelve True para NaN y False para todo lo demás. Luego, asignamos 1 a col2 si el valor es NaN y 0 en caso contrario.
Con este código, deberías obtener la salida deseada: