La Función Lambda
La función lambda es una forma de definir una función en una sola línea de código. Usualmente se la asignamos a una variable
1
add_two = lambda my_input: my_input + 2
2
3
print(add_two(3)) #5
4
print(add_two(100)) # 102
5
print(add_two(-2)) # 0
Copied!
¿Como trabaja?:
    la función es guardada en una variable llamada add_two
    lambda declara que esta es una función lambda (es como declarar el def de la función normal de python)
    my_input es lo que pasamos como parámetro de la función
    my_input + 2 es lo que crearemos con el return
1
mylambda = lambda x: (x * 2) + 3
2
3
print(mylambda(5)) #13
Copied!
la función lambda funciona con todo tipo de variables no solo con integers!
1
stringlambda = lambda x: x.lower()
2
3
print(stringlambda("Hola Mundo!")) # hola mundo!
Copied!

Sentencias if con Lambda

Podemos hacer los lambdas más complejos usando una forma modificada de la sentencia if. Supongamos que queremos pagar a los trabajadores medio tiempo por las horas extras (cualquier trabajo de más de 40 horas por semana). la siguiente función convertirá el número de horas en medio tiempo utilizando una sentencia if
hagamos primero el ejercicio con una función "normal" de python
1
def myfunction(x):
2
if x > 40:
3
return 40 + (x - 40) * 1.50
4
else:
5
return x
6
7
print(myfunction(43)) #44.5
Copied!
Hagamos lo mismo, pero ahora con la función Lambda de python
1
myfunction = lambda x: 40 + (x - 40 ) * 1.50 if x > 40 else x
2
3
print(myfunction(43)) #44.5
Copied!
En términos generales la sintaxis es la siguiente:
1
variable = lambda x: [SALIDA SI ES TRUE] if [CONDICIONAL] else [SALIDA SI ES FALSE]
Copied!

Aplicando Lambda a una columna

En pandas normalmente usamos lambdas para correr funciones complejas sobre columnas. Tenemos este dataframe:
1
df = pd.DataFrame([
2
['JHON SMITH', '[email protected]'],
3
['jane Doe', '[email protected]'],
4
['Jos schomo', '[email protected]']
5
],
6
columns=['Name', 'Email'])
Copied!
Ahora supongamos que queremos crear una columna que contenga el proveedor del email de cada email address. recuerde que para esto podemos usar el método split de python. Algo como esto: ('[email protected]').split('@')[-1] y retornará 'gmail.com', o sea el proveedor de email. Queremos hacer esta operación sobre cada elemento de una columna de pandas.
1
df['Email Provider'] = df.Email.apply(
2
lambda x: x.split('@')[-1]
3
)
4
5
print(df)
6
7
# Name Email Email Provider
8
# 0 JHON SMITH [email protected] gmail.com
9
# 1 jane Doe [email protected] yahoo.com
10
# 2 Jos schomo [email protected] outlook.com
Copied!

Aplicando lambdas en una fila

También podemos hacer operaciones sobre múltiples columnas a la vez. Si usamos apply sin especificar una columna y añadimos el argumento axis=1 el input a la función lambda será la fila completa no una columna. Recordemos que para acceder a los valores de una fila usamos la sintaxis row.colum_name o row["column_name"]
1
df = pd.DataFrame([
2
['Manzana', 1.00, 'No'],
3
['Leche', 4.20, 'No'],
4
['Papel', 5.00, 'Yes'],
5
['Bombilla', 3.75, 'Yes']
6
],
7
columns =['Item', 'Price', 'Is taxed?'])
Copied!
Queremos añadir el precio con los impuestos por cada fila, necesitaremos revisar dos columnas: price e Is taxed?
    Si Is taxed? es Yes, lo multiplicamos por 7.5% (1.075)
    Si Is taxed? es No, dejamos el precio sin multiplicar
1
df['Price with Tax'] = df.apply(
2
lambda row: row['Price'] * 1.075 if row['Is taxed?'] == 'Yes' else row['Price'],
3
axis = 1
4
)
5
6
print(df)
7
8
# Item Price Is taxed? Price with Tax
9
# 0 Manzana 1.00 No 1.00000
10
# 1 Leche 4.20 No 4.20000
11
# 2 Papel 5.00 Yes 5.37500
12
# 3 Bombilla 3.75 Yes 4.03125
Copied!
Last modified 5mo ago