Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • Sentencias if con Lambda
  • Aplicando Lambda a una columna
  • Aplicando lambdas en una fila
  1. Pandas

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

add_two = lambda my_input: my_input + 2

print(add_two(3)) #5
print(add_two(100)) # 102
print(add_two(-2)) # 0

¿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

mylambda = lambda x: (x * 2) + 3

print(mylambda(5)) #13

la función lambda funciona con todo tipo de variables no solo con integers!

stringlambda = lambda x: x.lower()

print(stringlambda("Hola Mundo!")) # hola mundo!

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

def myfunction(x):
    if x > 40:
        return 40 + (x - 40) * 1.50
    else:
        return x

print(myfunction(43)) #44.5

Hagamos lo mismo, pero ahora con la función Lambda de python

myfunction = lambda x: 40 + (x - 40 ) * 1.50 if x > 40 else x

print(myfunction(43)) #44.5

En términos generales la sintaxis es la siguiente:

variable = lambda x: [SALIDA SI ES TRUE] if [CONDICIONAL] else [SALIDA SI ES FALSE]

Aplicando Lambda a una columna

En pandas normalmente usamos lambdas para correr funciones complejas sobre columnas. Tenemos este dataframe:

df = pd.DataFrame([
    ['JHON SMITH', 'john.smith@gmail.com'],
    ['jane Doe', 'jdoe@yahoo.com'],
    ['Jos schomo', 'joe@outlook.com']
],
columns=['Name', 'Email'])

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: ('john@gmail.com').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.

df['Email Provider'] = df.Email.apply(
    lambda x: x.split('@')[-1]
)

print(df)

#     Name                 Email Email Provider
# 0  JHON SMITH  john.smith@gmail.com      gmail.com
# 1    jane Doe        jdoe@yahoo.com      yahoo.com
# 2  Jos schomo       joe@outlook.com    outlook.com

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"]

df = pd.DataFrame([
    ['Manzana', 1.00, 'No'],
    ['Leche', 4.20, 'No'],
    ['Papel', 5.00, 'Yes'],
    ['Bombilla', 3.75, 'Yes']
],
columns =['Item', 'Price', 'Is taxed?'])

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

df['Price with Tax'] = df.apply(
    lambda row: row['Price'] * 1.075 if row['Is taxed?'] == 'Yes' else row['Price'],
    axis = 1
)

print(df)

#     Item  Price Is taxed?  Price with Tax
# 0   Manzana   1.00        No         1.00000
# 1     Leche   4.20        No         4.20000
# 2     Papel   5.00       Yes         5.37500
# 3  Bombilla   3.75       Yes         4.03125
PreviousModificando DataframesNextAggregates en Pandas

Last updated 2 years ago