• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Creación de tablas resumen en Python con Sidetable

diciembre 13, 2021 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 5 minutos

Sidetable es un complemento para Pandas con el que es posible crear fácilmente tablas resumen en Python de los conjuntos de datos. Lo que consigue mediante la combinación de funciones de tabulación cruzada y recuento de datos, simplificando muchos análisis habituales.

Tabla de contenidos

  • 1 Instalación y conjunto de datos de ejemplo
  • 2 Obtener la frecuencia de ocurrencia con Sidetable
  • 3 Obtener la frecuencia en base a múltiples columnas
  • 4 Contar los registros de todas las columnas
  • 5 Valores faltantes o nulos
  • 6 Subtotales
  • 7 Conclusiones

Instalación y conjunto de datos de ejemplo

El método más sencillo para instalar Sidetable en Python es usar el comando pip en la terminal. Así para instalar la librería solamente es necesario abrir la terminal y escribir el siguiente comando

pip install sidetable

Para ver el funcionamiento de Sidetable usare el conjunto de datos tips que se puede importar de la librería Seaborn. Un conjunto de datos que cuenta con 244 registros de facturas de restaurantes con la cantidad total de la cuenta, la propina y datos sobre los comensales. La importación y los primeros registros se pueden ver con el siguiente código.

import pandas as pd
import sidetable
from seaborn import load_dataset

tips = load_dataset("tips")

tips.head()
   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

Publicidad


Obtener la frecuencia de ocurrencia con Sidetable

Para este conjunto de datos puede ser interesante la frecuencia de ocurrencia en base al día de la semana. Algo que, gracias a haber importado Sidetable, se puede conseguir fácilmente con

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows
En Analytics Lane
Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

tips.stb.freq(['day'])
    day  count    percent  cumulative_count  cumulative_percent
0   Sat     87  35.655738                87           35.655738
1   Sun     76  31.147541               163           66.803279
2  Thur     62  25.409836               225           92.213115
3   Fri     19   7.786885               244          100.000000

Nótese que ahora el objeto DataFrame cuenta con una nueva propiedad llamada stb dentro de la cual se pueden encontrar métodos para la creación de tablas resumen. En este caso se ha utilizado el método freq() para crear una tabla resumen de frecuencias en función del día de la semana, columna que se ha indicado mediante la lista de nombres. El resultado es una tabla ordenada de mayor a menor con el número de ocurrencias, el porcentaje, el número de ocurrencias y el porcentaje acumulados.

Por defecto la función freq() cuenta en número de ocurrencias, pero también se puede conseguir la suma de cualquier otra columna. Para esto es necesario pasar el nombre de la columna sobre la que se desea sumar en la propiedad value. Así los valores de facturación por día de la semana se pueden conseguir de la siguiente manera.

tips.stb.freq(['day'], value='total_bill')
    day  total_bill    percent  cumulative_total_bill  cumulative_percent
0   Sat     1778.40  36.836883                1778.40           36.836883
1   Sun     1627.16  33.704174                3405.56           70.541057
2  Thur     1096.33  22.708828                4501.89           93.249886
3   Fri      325.88   6.750114                4827.77          100.000000

Obtener la frecuencia en base a múltiples columnas

El método freq() admite análisis más complejos, en lugar de una única columna se pueden indicar varias, obteniéndose de este modo la frecuencia para todas la indicadas. Por ejemplo, se pueden combinar el día de la semana con el género de los comensales.

tips.stb.freq(['day','sex'])
    day     sex  count    percent  cumulative_count  cumulative_percent
0   Sat    Male     59  24.180328                59           24.180328
1   Sun    Male     58  23.770492               117           47.950820
2  Thur  Female     32  13.114754               149           61.065574
3  Thur    Male     30  12.295082               179           73.360656
4   Sat  Female     28  11.475410               207           84.836066
5   Sun  Female     18   7.377049               225           92.213115
6   Fri    Male     10   4.098361               235           96.311475
7   Fri  Female      9   3.688525               244          100.000000

En este caso también se pueden cambiar el conteo de ocurrencias por el sumatoria de otras columnas, como puede ser el caso de la factura total.

tips.stb.freq(['day', 'sex'], value='total_bill')
    day     sex  total_bill    percent  cumulative_total_bill  cumulative_percent
0   Sun    Male     1269.46  26.294956                1269.46           26.294956
1   Sat    Male     1227.35  25.422711                2496.81           51.717667
2  Thur    Male      561.44  11.629386                3058.25           63.347053
3   Sat  Female      551.05  11.414173                3609.30           74.761225
4  Thur  Female      534.89  11.079442                4144.19           85.840668
5   Sun  Female      357.70   7.409218                4501.89           93.249886
6   Fri    Male      198.57   4.113079                4700.46           97.362965
7   Fri  Female      127.31   2.637035                4827.77          100.000000

Una opción interesante para cuando existen demasiados valores diferentes es seleccionar únicamente los primeros registros que suman hasta un porcentaje. Para lo que se puede usar la propiedad thresh. Por ejemplo, se puede seleccionar únicamente los registros que suman el primer 70% de la factura. Selecciona de esta manera las categorías de datos más significativas.

tips.stb.freq(['day', 'sex'], value='total_bill', thresh=70)
      day     sex  total_bill    percent  cumulative_total_bill  cumulative_percent
0     Sun    Male     1269.46  26.294956                1269.46           26.294956
1     Sat    Male     1227.35  25.422711                2496.81           51.717667
2    Thur    Male      561.44  11.629386                3058.25           63.347053
3  others  others     1769.52  36.652947                4827.77          100.000000

Agrupando el resto de los valores en un fila a la que se denomina others.

Publicidad


Contar los registros de todas las columnas

Otra método de los que ofrece Sidetable es counts() con el que se puede obtener una tabla resumen con la frecuencia y otros valores de cada una de las columnas.

tips.stb.counts()
            count  unique most_freq  most_freq_count least_freq  least_freq_count
sex           244       2      Male              157     Female                87
smoker        244       2        No              151        Yes                93
time          244       2    Dinner              176      Lunch                68
day           244       4       Sat               87        Fri                19
size          244       6         2              156          6                 4
tip           244     123         2               33       1.01                 1
total_bill    244     229     13.42                3      17.82                 1

En el caso de que únicamente sea de interés las variables de algún tipo existe la opción de excluir valores con exclude. Por ejemplo, se puede excluir los valores categóricos con

tips.stb.counts(exclude='category')
            count  unique  most_freq  most_freq_count  least_freq  least_freq_count
size          244       6       2.00              156        6.00                 4
tip           244     123       2.00               33        1.01                 1
total_bill    244     229      13.42                3       17.82                 1

Valores faltantes o nulos

Sidetable también cuenta con un método para contar el número de valores faltantes o nulos. Lo que se puede obtener con el método missing. El conjunto de datos tips no cuenta con este tipo de valores, por lo que este método es mejor evaluarlo con otro conjunto como planets.

planets = load_dataset("planets")
planets.stb.missing()
                missing  total    percent
mass                522   1035  50.434783
distance            227   1035  21.932367
orbital_period       43   1035   4.154589
method                0   1035   0.000000
number                0   1035   0.000000
year                  0   1035   0.000000

Obteniendo como resultado una tabla en la que están ordenadas de mayor a menor las columnas que cuentan con más valores faltantes. Información que puede ser necesaria para saber si es necesario imputar o no los valores faltantes.

Publicidad


Subtotales

Al resumir los valores en base a dos variables muchas veces es interesante contar con los valores agregados en base a cada una. Por ejemplo, si se tiene el total de facturación por día y género posible que nos interese el subtotal por día. Valores que los métodos de Pandas no ofrecen. En estas situaciones se puede usar el método subtotal() de Sidetable para completar las tablas con esta información.

tips[['day', 'sex', 'total_bill']].groupby(['day', 'sex']).sum().stb.subtotal()
                             total_bill
day         sex                        
Thur        Male                 561.44
            Female               534.89
            Thur - subtotal     1096.33
Fri         Male                 198.57
            Female               127.31
            Fri - subtotal       325.88
Sat         Male                1227.35
            Female               551.05
            Sat - subtotal      1778.40
Sun         Male                1269.46
            Female               357.70
            Sun - subtotal      1627.16
grand_total                     4827.77

Conclusiones

En esta ocasión se ha visto las opciones que ofrece Sidetable para la creación de tablas resumen en Python. Una librería que sea de utilidad para el trabajo diario con Pandas, facilitando la creación de muchos de los resúmenes habituales.

Imagen de Goumbik en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 3.5 / 5. Votos emitidos: 2

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows
  • Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte
  • Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)
  • Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato
  • ¿Media, mediana o moda en variables ordinales? Guía práctica para el análisis de datos
  • Cómo ejecutar JavaScript desde Python: Guía práctica con js2py
  • Cómo generar contraseñas seguras con Python (y entender su nivel de seguridad)
  • Curiosidad: ¿Por qué los datos “raros” son tan valiosos?
  • Detectan vulnerabilidad crítica en MLflow que permite ejecución remota de código

Publicado en: Python Etiquetado como: Pandas

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Cómo crear un Data Lake en Azure paso a paso

noviembre 13, 2025 Por Daniel Rodríguez

¿Por qué el azar no es tan aleatorio como parece?

noviembre 11, 2025 Por Daniel Rodríguez

Noticias

Detectan vulnerabilidad crítica en MLflow que permite ejecución remota de código

noviembre 10, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Creación de gráficos de barras y gráficos de columnas con Seaborn publicado el julio 18, 2023 | en Python
  • Creación de documentos Word con Python publicado el septiembre 7, 2020 | en Python
  • Diferencia entre R2 y R2 ajustado en modelos de regresión publicado el marzo 8, 2024 | en Ciencia de datos
  • Cómo calcular el tamaño de la muestra para encuestas publicado el septiembre 9, 2025 | en Ciencia de datos
  • Separar texto en columnas con Pandas en Python publicado el octubre 19, 2020 | en Python

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto