Python lambda basado en una condición en dos columnas
Necesito agregar una columna indicadora a mi dataframe que marque a los usuarios con un código promocional (1 si tienen una promoción, de lo contrario, 0). Necesito revisar dos columnas y ver si existe algún código promocional en alguna de ellas, col_promo1 o col_promo2. Este es el código que estoy utilizando pero me devuelve un valor NaN:
df[‘promo_ind’] = df[[‘col_promo_1’, ‘col_promo_2’]].apply(lambda x: 1 if x is not None else 0)
Sin embargo, cuando uso el código con solo una columna, por ejemplo col_promo1, el resultado es preciso. ¿Alguna idea sobre cómo puedo solucionar esto?
davy.ai
El problema con el código es que estás comprobando si el valor de la columna no es None, pero necesitas comprobar si no es un NaN. NaN es un valor especial de punto flotante que representa No es un número. Aquí está el código actualizado que debería funcionar para verificar si alguno de los códigos promocionales existe:
Este código aplicará la función lambda a cada fila del dataframe utilizando el parámetro
axis=1
. Dentro de la función lambda, se comprueba si tantocol_promo_1
comocol_promo_2
no son NaN utilizando la funciónpd.isna()
. Si alguno de ellos no es NaN, entonces el valor del indicador de promoción será 1, de lo contrario será 0.