Saltar al contenido

Resaltar múltiples celdas en diferentes colores con Pandas

Indagamos por diferentes foros y así regalarte la solución para tu duda, si tienes alguna duda puedes dejar tu inquietud y te contestaremos con mucho gusto.

Solución:

Puede usar el corte en estilo con el parámetro subset y función Styler.applymap para estilos elementales, ejecute el código en jupyter notebook:

import pandas as pd
import numpy as np

def red(val):
    color = 'red'
    return 'background-color: %s' % color

def green(val):
    color = 'green'
    return 'background-color: %s' % color

raw_data = 'regiment': ['Nighthawks', 'Nighthawks', 'Nighthawks', 'Nighthawks', 'Dragoons', 'Dragoons', 'Dragoons', 'Dragoons', 'Scouts', 'Scouts', 'Scouts', 'Scouts'],
            'company': ['1st', '1st', '2nd', '2nd', '1st', '1st', '2nd', '2nd','1st', '1st', '2nd', '2nd'],
            'deaths': [523, 52, 25, 616, 43, 234, 523, 62, 62, 73, 37, 35],
            'battles': [5, 42, 2, 2, 4, 7, 8, 3, 4, 7, 8, 9],
            'size': [1045, 957, 1099, 1400, 1592, 1006, 987, 849, 973, 1005, 1099, 1523],
            'veterans': [1, 5, 62, 26, 73, 37, 949, 48, 48, 435, 63, 345],
            'readiness': [1, 2, 3, 3, 2, 1, 2, 3, 2, 1, 2, 3],
            'armored': [1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1],
            'deserters': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3],
            'origin': ['Arizona', 'California', 'Texas', 'Florida', 'Maine', 'Iowa', 'Alaska', 'Washington', 'Oregon', 'Wyoming', 'Louisana', 'Georgia']

df = pd.DataFrame(raw_data, columns = ['regiment', 'company', 'deaths', 'battles', 'size', 'veterans', 'readiness', 'armored', 'deserters', 'origin'])

df = df.set_index('origin')
print (df)

df.style.applymap(green, subset=pd.IndexSlice['Arizona':'Texas', 'company': 'size'])
        .applymap(red, subset=pd.IndexSlice['Florida':'Maine', 'veterans': 'armored'])

Si necesita cambiar solo algunos valores en DataFramepuedes usar Styler.apply con axis=None para estilos de tabla, también la función debe devolver un DataFrame con el mismo índice y etiquetas de columna:

def create_colors(x):
    #copy df to new - original data are not changed
    df1 = x.copy()
    #select all values to default value - no color
    df1.loc[:,:] = 'background-color: '
    #overwrite values with green and red color
    df1.loc['Arizona', 'company'] = 'background-color: green'
    df1.loc['Texas', 'size'] = 'background-color: green'
    df1.loc['Florida', 'veterans'] = 'background-color: red'
    df1.loc['Maine', 'armored'] = 'background-color: red'
    #return color df
    return df1      

df.style.apply(create_colors, axis=None)

tabla 1

Si te ha resultado provechoso nuestro artículo, sería de mucha ayuda si lo compartieras con más desarrolladores de esta manera contrubuyes a difundir este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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