Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

08 Desafío: finalizando el proyecto

Durante el curso, se creó una tabla simplificada para un informe de rendimiento, pero no se finalizó.

El desafío ahora es finalizar la construcción de la tabla, destacando el elemento de la fila Total. También puede aplicar otras estilizaciones que considere más adecuadas para la visualización.


import pandas as pd
import numpy as np

# Agrupamos por categoría y tipo de cliente
df = pd.read_csv('/content/tienda_libros.csv')
df_cliente = df.groupby(['categoria', 'tipo_cliente'])['costo_producto'].sum().unstack().fillna(0)
df_cliente['Total'] = df_cliente.sum(axis=1)

# Añadimos una fila de "Total" al final
total_row = df_cliente.sum().to_frame().T
total_row.index = ['Total']
df_cliente = pd.concat([df_cliente, total_row])

compra_cliente = df_cliente.style.format('{:,.2f}')

# Estilos
base_styles = [
    {'selector': 'td, th:not(.index_name)', 
     'props': 'font-weight: normal; font-family: Arial; text-align: center; background-color: white;'},
    {'selector': '.index_name', 
     'props': 'font-weight: normal; text-align: right; font-style: italic; color: #696969;'}
]
compra_cliente.set_table_styles(base_styles)

# Líneas divisorias para columnas
compra_cliente.set_table_styles({
    'Total': [{'selector': 'th, td', 'props': 'border-left: 1px solid #181818'}],
    'B2B': [{'selector': 'th, td', 'props': 'border-left: 1px solid #181818'}]
}, overwrite=False, axis=0) # Usamos axis=0 para aplicar a lo largo de la columna

# Resaltar la celda con el mayor valor de Total
categorias_solo = df_cliente.index.difference(['Total'])
max_val = df_cliente.loc[categorias_solo, 'Total'].max()

# Creamos el CSS
clases = pd.DataFrame(
    np.where(df_cliente[['Total']] == max_val, 'highlight_max', ''),
    index=df_cliente.index, columns=['Total']
)
compra_cliente.set_td_classes(clases)

compra_cliente.set_table_styles([
    {'selector': '.highlight_max', 'props': 'background-color: #D8D8D8; font-weight: bold; color: #d73027;'}
], overwrite=False)

# destacamos la fila total
compra_cliente.set_table_styles({
    'Total': [{
        'selector': 'th, td',
        'props': 'background-color: #333333; color: white; font-weight: bold; border-top: 2px solid black;'
    }]
}, overwrite=False, axis=1) # axis=1 para seleccionar la fila por su etiqueta de índice

# Añadimos un degradado suave a las ventas B2B y B2C
compra_cliente.background_gradient(cmap='Blues', subset=(categorias_solo, ['B2B', 'B2C']))

compra_cliente

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

Hola César, espero que estés bien

Para finalizar la estilización de tu tabla y asegurarte de que el elemento de la fila "Total" esté destacado, puedes seguir estos pasos:

  1. Asegúrate de que la fila "Total" esté claramente diferenciada: Ya has aplicado un fondo oscuro y texto blanco a la fila "Total", lo cual es excelente. Asegúrate de que el borde superior sea más grueso para destacar aún más.

  2. Resalta el valor máximo en la columna "Total": Ya has aplicado un estilo para resaltar el valor máximo. Asegúrate de que el color de fondo y el texto sean lo suficientemente contrastantes para que se noten.

  3. Aplica un degradado a las columnas B2B y B2C: Esto ayudará a visualizar mejor los datos. Ya has utilizado background_gradient para esto.

Aquí tienes un ejemplo de cómo podrías ajustar el código para asegurarte de que todo esté bien estilizado:

# Resaltar la fila total con un borde más grueso
compra_cliente.set_table_styles({
    'Total': [{
        'selector': 'th, td',
        'props': 'background-color: #333333; color: white; font-weight: bold; border-top: 3px solid black;'
    }]
}, overwrite=False, axis=1)

# Asegúrate de que el valor máximo esté bien destacado
compra_cliente.set_table_styles([
    {'selector': '.highlight_max', 'props': 'background-color: #D8D8D8; font-weight: bold; color: #d73027;'}
], overwrite=False)

# Aplica un degradado suave a las ventas B2B y B2C
compra_cliente.background_gradient(cmap='Blues', subset=(categorias_solo, ['B2B', 'B2C']))

compra_cliente

Esto debería ayudarte a finalizar la tabla de manera efectiva. Espero que esta solución sea de utilidad.

¡Espero haber ayudado y buenos estudios!