Crear una columna con ELIF en Pandas

Pregunta

Estoy teniendo problemas para descubrir cómo crear una nueva columna DataFrame basada en los valores de otras dos columnas. Necesito usar if / elif / else logic. Pero toda la documentación y los ejemplos que he encontrado solo muestran si / else lógica. Aquí hay una muestra de lo que estoy tratando de hacer:

Código

df['combo'] = 'mobile' if (df['mobile'] == 'mobile') elif (df['tablet'] =='tablet') 'tablet' else 'other') 

Estoy abierto a usar where () también. Sólo tengo problemas para encontrar la syntax correcta.

En los casos en los que tenga varias declaraciones de bifurcación, es mejor crear una función que acepte una fila y luego aplicarla a lo largo del axis=1 . Esto suele ser mucho más rápido que la iteración a través de filas.

 def func(row): if row['mobile'] == 'mobile': return 'mobile' elif row['tablet'] =='tablet': return 'tablet' else: return 'other' df['combo'] = df.apply(func, axis=1) 

Intenté lo siguiente y el resultado fue mucho más rápido. Espero que sea útil para los demás.

 df['combo'] = 'other' df.loc[df['mobile'] == 'mobile', 'combo'] = 'mobile' df.loc[df['tablet'] == 'tablet', 'combo'] = 'tablet' 

ELIF lógica ELIF se puede implementar con np.select o np.where nested:

 import numpy as np df['combo'] = np.select([df.mobile == 'mobile', df.tablet == 'tablet'], ['mobile', 'tablet'], default='other') # or df['combo'] = np.where(df.mobile == 'mobile', 'mobile', np.where(df.tablet == 'tablet', 'tablet', 'other')) 

Datos de muestra + salida:

  mobile tablet combo 0 mobile bar mobile 1 foo tablet tablet 2 foo nan other 3 mobile tablet mobile 4 mobile nan mobile 5 foo tablet tablet 6 mobile bar mobile 7 mobile tablet mobile 8 mobile bar mobile 9 mobile nan mobile