Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

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