Aggregates en Pandas
Los agregados son una forma de crear un único número que describe un grupo de números
Los aggregates más comunes incluyen la media (mean), la mediana (median) o la desviación standard (standard deviation)
También aprenderemos a hacer un “rearrange” en un dataframe, lo cual es una forma de comparar datos entre dos dimensiones

Estadística de una columna

Anteriormente vimos como correr operaciones sobre cada valor en una columna usando apply Vamos a ver como combinar todos los valores de una columna en un único cálculo
1
movies = pd.DataFrame([
2
['Avatar', 'action', 2009, 7.9],
3
['Jurassic World', 'action', 2015, 7.3]
4
['The Avengers', 'action', 2012, 8.1]
5
['The Dark Knight', 'action', 2008, 9.0]
6
],
7
columns=['name', 'genre', 'year', 'imdb_rating'])
8
9
print(movies)
10
print(movies.year.median())
Copied!

Nunique & Unique

Veamos cual es el número de ocurrencias únicas
1
print(movies.year.nunique())
Copied!
Veamos los valores únicos
1
print(movies.year.unique())
Copied!

Sintaxis

La sintaxis general para correr cálculos es:
1
df.column_name.command()
Copied!
La siguiente es una tabla que resume los comandos más comunes:
1
comando | Descripción
2
mean | Promedio de todos los valores de la columna
3
std | Desviación estándar todos los valores de la columna
4
median | Mediana de todos los valores de la columna
5
max | Valor máximo de la columna
6
min | Valor mínimo de la columna
7
count | Número de valores en la columna
8
nunique | Número de valores únicos en la columna
9
unique | Lista de los valores únicos en la columna
Copied!

Ejercicios

Descargue este csv llamado orders.csv https://drive.google.com/file/d/1EPqj_vQH-o2PcnChrg2CyUzGNMnVWe8K/view?usp=sharing, y siga los siguientes pasos:
1
orders = pd.read_csv('orders.csv')
2
print(orders.head(10))
3
4
most_expensive = orders.price.max()
5
print(most_expensive)
6
7
num_colors = orders.shoe_color.nunique()
8
print(num_colors)
Copied!

Calculando aggregates

En Pandas también podemos usar el groupby con la siguiente sintaxis:
1
df.groupby('column1').column2.measurement()
Copied!
Donde:
    column1: es la columna por la que queremos agrupar (groupby)
    column2: es la columna sobre la cual queremos ejecutar el aggregate (measurement)
    measurement: es el método para calcular la medición que queremos aplicar.
Nuestro departamento de finanzas quiere conocer el zapato más costoso que vendemos por cada tipo de zapato (shoe_type), ¿cómo lo haríamos?
1
pricey_shoes = orders.groupby('shoe_type').price.max()
2
print(pricey_shoes)
Copied!
Después de usar groupby normalmente necesitaremos limpiar nuestros datos resultantes. groupby normalmente crea un Series no un DataFrame. Podemos usar reset_index(), esto volverá a transformar nuestro Series en un DataFrame y mover los índices a su propia columna. lo hacemos así:
1
df.group('column1').column2.measurement().reset_index()
Copied!
1
pricey_shoes = orders.groupby('shoe_type').price.max().reset_index()
2
print(pricey_shoes)
Copied!
Algunas veces la operación que queremos correr será más complicada que la media o el count. En esos casos podremos aplicar la función apply y las funciones lambda. De la misma forma como hicimos con columnas individuales. Un buen ejemplo de esto es calcular los percentiles.
Nuestro departamento de marketing dice que es importante tener zapatos a precios razonables y en disponibilidad para todos los colores del inventario. Vamos a calcular el 25th percentile al precio del zapato por cada color
1
import numpy as np
2
3
cheap_shoes = orders.groupby('shoe_color').price.apply(lambda x: np.percentile(x, 25)).reset_index()
4
5
print(cheap_shoes)
Copied!
Algunas veces vamos a querer agregar por más de una columna. Podemos hacer esto pasando una lista de los nombres de las columnas en el método groupby. Imaginemos que el equipo de compras cree que ciertas combinaciones de tipos de zapatos y colores son particularmente populares este año. Vamos a crear un dataframe con el total del número de zapatos de cada combinación por tipo y color comparada
1
shoe_count = orders.groupby(['shoe_type', 'shoe_color']).id.count().reset_index()
2
3
print(shoe_count)
Copied!

Pivot Tables

Cuando corremos un groupby entre múltiples columnas, muy seguido vamos a querer cambiar como es guardada la data. Reorganizar la tabla es lo que se conoce como "pivoting". La nueva tabla es llamada pivot table. En Pandas el comando para pivotar es:
1
df.pivot(columns='ColumnToPivot', index='ColumnToBeRows', values='ColumnToBeValues')
Copied!
Siguiendo este ejemplo anterior
1
shoe_count = orders.groupby(['shoe_type', 'shoe_color']).id.count().reset_index()
2
3
shoes_count_pivot = shoe_count.pivot(
4
columns='shoe_color',
5
index='shoe_type',
6
values='id').reset_index()
7
8
print(shoes_count_pivot)
Copied!
Last modified 5mo ago