Las Pivot Tables son una herramienta poderosa y versátil que nos permite resumir y reorganizar columnas de datos crudos de un DataFrame de pandas. Gracias a ellas, podemos realizar cálculos estadísticos comunes como sumas, conteos y promedios, ayudándonos a descubrir patrones ocultos y obtener insights valiosos de nuestros datos originales.
Al utilizar Pivot Tables, puedes:
Resumir y reorganizar los datos.
Identificar patrones.
Comparar subgrupos de datos.
¿Cómo crear una Pivot Table?
Para crear una Pivot Table en pandas, debes seguir un proceso estructurado, especificando varios parámetros clave. Veamos cómo hacerlo paso a paso.
¿Cómo pasar la información al DataFrame?
El primer paso es definir el DataFrame que vamos a utilizar. Luego, especificaremos las columnas y los índices que deseamos tener en nuestra Pivot Table.
DataFrame inicial: Debemos tener un DataFrame con los datos que queremos analizar.
Columna de valores: Definimos la columna cuyo cálculo estadístico queremos realizar (por ejemplo, 'cantidad').
Índice: En lugar de usar un índice posicional (como 0, 1, 2), se puede utilizar una de las columnas como índice. Por ejemplo, 'country'.
Columnas: Incluir las columnas que deseas evaluar, como los 'stock codes'.
Función de cálculo: Determina la función que aplicarás, como la suma, para mostrar las sumatorias totales en el índice.
import pandas as pd
# Crear una pivot tablepivot_table = pd.pivot_table( data_frame, values='cantidad', index='country', columns='stock code', aggfunc='sum')
¿Cómo modificar las funciones agregadas?
Se pueden personalizar las funciones agregadas de nuestra Pivot Table según la necesidad del análisis.
En lugar de sumar, podemos calcular la media, por ejemplo:
# Modificar para utilizar la función de mediapivot_table = pd.pivot_table( data_frame, values='cantidad', index='country', columns='stock code', aggfunc='mean')
¿Cómo apilar y desapilar datos en DataFrames?
El apilamiento y desapilamiento de datos son técnicas útiles cuando necesitas cambiar la estructura de tu DataFrame para análisis más profundos o para ajustar la presentación de la información.
¿Qué es el método stack en pandas?
El método stack convierte el índice de un DataFrame en una columna, apilando los datos.
# Usar el método stack para apilar datosstacked_df = original_df.stack()
¿Qué es el método unstack en pandas?
El unstack hace el proceso contrario al stack, transformando columnas en índices.
# Usar el método unstack para desapilar datosunstacked_df = stacked_df.unstack()
Un paso más allá con Pivot Tables
Las Pivot Tables y los métodos de apilar y desapilar ofrecen posibilidades casi ilimitadas para el análisis de datos. Ahora no solo estás limitado a índices posicionales; puedes modificar y utilizar columnas para un análisis más profundo y personalizado.
¡Explora estas funcionalidades y descubre cómo pueden aportar valor en tus proyectos actuales o futuros! Si tienes alguna idea de cómo aplicarás estos conceptos en el análisis de retail o en otro tipo de proyectos, comparte tus reflexiones. Estaré encantado de leerte y seguir aprendiendo juntos.
Las pivot tables (tablas dinámicas, en Excel) y los métodos stack y unstack pueden ser aplicados en nuestro df de ventas, según el interés de la audiencia a la que nos dirijamos:
Equipo gerencial: total de ventas por productos, por clientes o por región (para definir políticas o planes comerciales)
Proveeduría o fabricación: cantidades vendidas por producto (StockCode o Description) o por país (para asegurar disponibilidad del inventario)
Contabilidad o financiera: total de ventas por cliente, por facturas o por períodos: años, meses o días (para realizar conciliaciones bancarias, revisar cuentas de clientes o generar reportes tributarios o para la gerencia).
etc
¡Excelente aporte! Descubrí que es posible hacer un sort, si se agrega alguna columna totalizada para presentar los datos organizados por de mayor a menor.
Una pivot table es una herramienta para resumir y reorganizar columnas de un DataFrame de pandas, que además permite crear cálculos estadísticos (suma, conteos, promedios, etc.).
Básicamente transforma los valores de determinadas filas o columnas en indices de un nuevo DataFrame, la intersección de éstos es el valor resultante.
La nueva organización de los datos nos ayuda a encontrar patrones que pudieran estar ocultos en los datos crudos.
Función:
pivot_table(): Puede implementarse directo del DataFrame o a partir de la librería en si misma "pd.pivot_table()" con la diferencia de que ésta última recibe el DF como parámetro.
Parámetros:
data: Cuando se utiliza la función directamente de pandas.
values: Nombre de la columna o columnas (lista) que rellenarán la tabla a partir de la función de agregación.
index: Nombre de la columna donde se tomarán los valores para crear los indices del DataFrame resultante.
columns: Nombre de la columna donde se tomarán los valores las nuevas columnas del DataFrame resultante.
aggfunc: Función de agregación a aplicar.
Ejemplo # 1: Crear un resumen del promedio de ventas que tuvo cada país durante los doce meces del año 2011.
# Creamos una copia del DataFrame originalsales_2011 = retail_df.loc[retail_df["InvoiceDate"].dt.year ==2011,::]# Creamos la columna "Year" donde guardaremos la extracción de año a partir del "InvoiceDate"sales_2011["Month"]= sales_2011["InvoiceDate"].dt.month
# Hacemos un pivot table sales_by_year = sales_2011.pivot_table( values="TotalPrice", index="Country", columns="Month", aggfunc="mean")
sales_by_year
Resultado:
Ejemplo #2: Crear un resumen del promedio de ventas que tuvo cada país durante los 4 trimestres del año 2011.
# Función para calcular cual es el trimestre del añodefquarter_of_year(value):if value in[1,2,3]:return"1st"elif value in[4,5,6]:return"2nd"elif value in[7,8,9]:return"3rd"else:return"4th"# Aplicamos la función para calcular el trimestre correspondiente sales_2011["Quarter"]= sales_2011["Month"].apply(quarter_of_year)# Hacemos pivot table donde las columnas seran cada trimestre del 2011quarter_sales = sales_2011.pivot_table( values="TotalPrice", index="Country", columns="Quarter", aggfunc="mean")quarter_sales.head()
Resultado:
Gran comentario
Excelentes ejercicios y muy prácticos para el curso
Usos Principales de las Pivot Tables
Resumir Datos: Permiten calcular agregaciones (como sumas, medias, conteos) y ver resultados resumidos en una tabla estructurada.
Reorganizar Datos: Facilitan la reorganización de datos para ver relaciones entre diferentes variables. Puedes pivotar filas en columnas y viceversa.
Comparar Datos: Ayudan a comparar datos en diferentes niveles de detalle, como por ejemplo ver las ventas por producto y por región en una sola tabla.
Visualizar Datos: Preparan datos para ser visualizados de manera más clara y significativa.
Apilada por producto, precio unitario, cantidad y total
gracias! buena forma de ver filtrando por columnas.
Aqui se pude ver como use la pívot table para identificar que vino tiene mayor cantidad de alcohol que otro
Si imprimimos
print(type(df_stacked))
Podemos ver que lo que obtenemos al hacer un stack de un dataframe es un objeto tipo Serie
<class 'pandas.core.series.Series'>
Tiene cierto parecido a la elaboración de tablas dinámicas en excel
¿Por qué es mejor usar stack?
Es mejor usar el método stack() cuando necesitas transformar un formato de datos "ancho" (con demasiadas columnas) a un formato "largo" (con más filas). Imagina que tienes los doce meses del año representados como columnas individuales; al aplicar stack(), comprimes todos esos meses en una sola columna categórica, moviendo esa información directamente a los índices. Esto es fundamental en la ciencia de datos porque muchas librerías de visualización avanzadas y algoritmos de Machine Learning están optimizados para consumir datos estrictamente en formato largo. Además, apilar los datos de esta manera facilita enormemente la realización de agrupaciones complejas y filtrados secuenciales que serían un verdadero dolor de cabeza si la información estuviera dispersa horizontalmente.
Las Pivot Tables, junto con los métodos stack() y unstack(), ofrecen una gran flexibilidad para analizar datos de manera profunda y personalizada. Estas herramientas son fundamentales para cualquier analista que busque transformar datos en información útil para la toma de decisiones.
Este es el ejemplo de la profe, crea una tabla pivote del df original, con los paises como indices, cuyos codigos de productos como las columnas y los valores son las cantidades distribuidas, al final si haces stack, obtienes información mas ordenada sobre la relación de esas variables.
No necesariamente hariamos stack al df original, primero debes de construir un df que cumpla con el objetivo de contener información que quieras contrastar sobre todo los datos, ejemplo, la cantidad de ventas de cierto producto (con un código asociado) en un pais determinado.
MOdelo coworcountry o modelo coworculture con muchas actividades para pausas activas y acompañamiento de tu rol profesional Recuerda que Estamos enfocados en atender y brindar espacios para nomadas digitales, teletrabajo y coworking space en Agrolenials Paradise Ecohostel Country Inns contacto directo whatsapp +573206299333 y Faccebook
WHITE HANGING HEART T-LIGHT HOLDER 5530 1874 1982 1907 4021
WORLD WAR 2 GLIDERS ASSTD DESIGNS 1492 3518 3888 10143 3893
Mes June
Description
ASSORTED COLOUR BIRD ORNAMENT 1484
ASSORTED COLOURS SILK FAN 3316
BROCADE RING PURSE 2989
JUMBO BAG RED RETROSPOT 3441
PACK OF 12 LONDON TISSUES 2343
PACK OF 60 PINK PAISLEY CAKE CASES 1481
PACK OF 72 RETROSPOT CAKE CASES 1862
SMALL POPCORN HOLDER 1127
WHITE HANGING HEART T-LIGHT HOLDER 1615
WORLD WAR 2 GLIDERS ASSTD DESIGNS 1978
Aplicar stack
tabla_stack = tabla_pivot.stack()
print("\n--- MÉTODO STACK (Formato Largo) ---")
# Mostramos los primeros 15 registros para ver cómo se apilaron los meses bajo cada producto
print(tabla_stack.head(15))
--- MÉTODO STACK (Formato Largo) ---
Description Mes
ASSORTED COLOUR BIRD ORNAMENT January 1771
February 1667
March 2649
April 2560
May 3059
June 1484
ASSORTED COLOURS SILK FAN January 377
February 2260
March 3104
April 1966
May 4684
June 3316
BROCADE RING PURSE January 3181
February 398
March 3396
dtype: int64
¿El método stack en pandas seria equivalente al unpivot en PowerQuery?
Si compañero, sería su equivalente
Porque hariamos el stack a un dataFrame?
No necesariamente hariamos stack al df original, primero debes de construir un df que cumpla con el objetivo de contener información que quieras contrastar sobre todo los datos, ejemplo, la cantidad de ventas de cierto producto (con un código asociado) en un pais determinado... Este es el ejemplo de la profe, crea una tabla pivote del df original, con los paises como indices, cuyos codigos de productos como las columnas y los valores son las cantidades distribuidas, al final si haces stack, obtienes información mas ordenada sobre la relación de esas variables.
Para facilitar el análisis de datos, puede que la información de las filas estén mejor en columnas.
Preparación para un modelo de Machine Learning, ciertos modelos requieren la información estructura según lo establezca el algoritmo.
Visualización, igualmente que el primer punto, puede que sea más fácil de visualizar si está ordenado de manera diferente.
Limpieza de datos, en ciertas ocasiones la información faltante no se muestra porque faltan filas, al hacer stack, las columnas se autocompletan mostrando la información faltante.
Espero haberte ayudado. ¡Nunca pares de aprender! 🚀🚀
stack permite comvertir algo que es de indice simple a multi indice y unstack convertir algo que es multi indice a indise simple, siendo indice simple lo que emos visto hacta ahora en la mayorias de dataframes (columnas con una sola serie o filas con un solo tipo de informacion). multy indice seria por ejemplo cuando en una columna tenemos varias series, o lo que sucedia en el ejemplo de la clase anterior al hacer groupby por 2 categoria obteniendo filas compuestas. el nivel del indice comienza en 0 ciendo el mas exterior .
En **Pandas**, la reestructuración de datos mediante las funciones pivot, pivot\_table, melt, y stack/unstack permite reorganizar y transformar **DataFrames** en diferentes formatos. Estas funciones son útiles para cambiar el formato de los datos, reorganizarlos o preparar resúmenes.
A continuación te explico cómo funcionan estas técnicas con ejemplos:
### 1. **pivot() para reorganizar columnas**
El método pivot() reorganiza los datos de un DataFrame al transformar columnas en índices, y los valores en filas.
#### Ejemplo:
import pandas as pd
\# Crear un DataFrame de ejemplo
df = pd.DataFrame({  'fecha': \['2023-01', '2023-02', '2023-01', '2023-02'],  'ciudad': \['Madrid', 'Madrid', 'Barcelona', 'Barcelona'],  'ventas': \[250, 300, 200, 210]})\# Reorganizar el DataFrame usando 'fecha' como índice,'ciudad' como columnas y 'ventas' como valores
pivot\_df = df.pivot(index='fecha', columns='ciudad', values='ventas')print(pivot\_df)
**Resultado:**
ciudad BarcelonaMadridfecha  2023-01200.0250.02023-02210.0300.0
### 2. **pivot\_table() para agregar datos**
La función pivot\_table() es similar a pivot(), pero permite realizar agregaciones si hay duplicados en los datos. Esto es útil cuando hay valores repetidos y deseas aplicar una función de agregación como sum(), mean(), etc.
#### Ejemplo con agregación:
\# Crear un DataFrame con datos repetidos
df = pd.DataFrame({  'fecha': \['2023-01', '2023-01', '2023-02', '2023-02'],  'ciudad': \['Madrid', 'Madrid', 'Barcelona', 'Barcelona'],  'ventas': \[250, 300, 200, 210]})\# Crear una tabla dinámica usando 'fecha' como índice,'ciudad' como columnas y 'ventas' como valores, agregando con sumpivot\_table\_df = df.pivot\_table(index='fecha', columns='ciudad', values='ventas', aggfunc='sum')print(pivot\_table\_df)
**Resultado:**
ciudad BarcelonaMadridfecha  2023-01200.0550.02023-02210.0NaN
### 3. **melt() para transformar de formato ancho a largo**
El método melt() transforma un **DataFrame** de formato ancho (donde los datos están en columnas) a formato largo (donde los datos se combinan en una columna única de valores).
#### Ejemplo:
\# Crear un DataFrame en formato ancho
df\_wide = pd.DataFrame({  'fecha': \['2023-01', '2023-02'],  'Madrid': \[250, 300],  'Barcelona': \[200, 210]})\# Convertir el DataFrame a formato largo usando melt()df\_long = pd.melt(df\_wide,id\_vars='fecha', var\_name='ciudad', value\_name='ventas')print(df\_long)
**Resultado:**
  fecha ciudad ventas
02023-01Madrid25012023-02Madrid30022023-01Barcelona20032023-02Barcelona210
### 4. **stack() y unstack() para reestructuración de índices jerárquicos**
stack() y unstack() son métodos que permiten manipular índices jerárquicos (índices multi-nivel).
- **stack()** convierte columnas en filas.
- **unstack()** convierte filas en columnas.
#### Ejemplo de stack():
\# Crear un DataFrame con multi-índice
df\_multi = df.pivot(index='fecha', columns='ciudad', values='ventas')\# Aplicar stack() para convertir las columnas en índices
stacked\_df = df\_multi.stack()print(stacked\_df)
**Resultado:**
fecha ciudad  2023-01Barcelona200 Madrid2502023-02Barcelona210 Madrid300dtype: int64
#### Ejemplo de unstack():
\# Aplicar unstack() para convertir los índices de nuevo en columnas
unstacked\_df = stacked\_df.unstack()print(unstacked\_df)
**Resultado:**
ciudad BarcelonaMadridfecha  2023-01200.0250.02023-02210.0300.0
### 5. **wide\_to\_long() para transformar varias columnas en una**
La función wide\_to\_long() es útil cuando tienes varias columnas que representan variables relacionadas y deseas convertirlas en una sola.
#### Ejemplo:
\# Crear un DataFrame con varias columnas
df\_wide = pd.DataFrame({  'id': \[1, 2],  'nombre': \['Ana', 'Pedro'],  'edad\_2021': \[25, 30],  'edad\_2022': \[26, 31]})\# Convertir el DataFrame a formato largo usando wide\_to\_long()df\_long = pd.wide\_to\_long(df\_wide, stubnames='edad', i='id', j='anio')print(df\_long)
**Resultado:**
  nombre edad
id anio  12021Ana25 2022Ana2622021Pedro30 2022Pedro31
### 6. **transpose() para intercambiar filas y columnas**
El método transpose() intercambia filas por columnas y viceversa.
#### Ejemplo:
\# Transponer el DataFrame
df\_transposed = df\_wide.transpose()print(df\_transposed)
### 7. **set\_index() y reset\_index() para trabajar con índices**
El método set\_index() permite establecer una columna como índice, y reset\_index() revierte la operación para convertir el índice en columna.
#### Ejemplo con set\_index():
\# Establecer la columna 'fecha' como índice
df\_indexed = df.set\_index('fecha')print(df\_indexed)
**Resultado:**
  ciudad ventas
fecha  2023-01Madrid2502023-01Madrid3002023-02Barcelona2002023-02Barcelona210
#### Ejemplo con reset\_index():
\# Restablecer el índice como columna
df\_reset = df\_indexed.reset\_index()print(df\_reset)
**Resultado:**
  fecha ciudad ventas
02023-01Madrid25012023-01Madrid30022023-02Barcelona20032023-02Barcelona210
### Resumen de funciones:
- **pivot()**: Convierte columnas en filas según un índice.
- **pivot\_table()**: Similar a pivot(), pero permite agregaciones.
- **melt()**: Transforma de formato ancho a largo.
- **stack()**: Convierte columnas en índices.
- **unstack()**: Convierte índices en columnas.
- **wide\_to\_long()**: Convierte varias columnas relacionadas en una columna única.
- **transpose()**: Intercambia filas y columnas.
- **set\_index()**: Establece una columna como índice.
- **reset\_index()**: Convierte un índice en columna.
Estas funciones permiten transformar los datos en diferentes formas según tus necesidades. Si tienes alguna duda sobre cómo aplicarlas en tu caso, ¡déjame saber!