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.

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?

Tags:  , ,

Answer

  1. Avatar for 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:

    df['promo_ind'] = df[['col_promo_1', 'col_promo_2']].apply(lambda x: 1 if (not pd.isna(x['col_promo_1']) or not pd.isna(x['col_promo_2'])) else 0, axis=1)
    

    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 tanto col_promo_1 como col_promo_2 no son NaN utilizando la función pd.isna(). Si alguno de ellos no es NaN, entonces el valor del indicador de promoción será 1, de lo contrario será 0.

Comments are closed.