Función estilo pandas para hignlight columnas específicas

He estado tratando de escribir una función para usar con el estilo de pandas. Quiero columnas altas que especifique en los argumentos. Esto no es muy elegante pero por ejemplo:

data = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC')) def highlight_cols(df, cols, colcolor = 'gray'): for col in cols: for dfcol in df.columns: if col == cols: color = colcolor return ['background-color: %s' % color]*df.shape[0] 

entonces llama con:

 data.style.apply(highlight_cols(cols=['B','C'])) 

Recibo un error: (“El objeto ” Serie ‘no tiene atributo’ columnas ‘”)

Creo que, fundamentalmente, no entiendo bien cómo llama y aplica la función el diseñador.

Gracias,

Creo que puede usar Cortar en Styles para seleccionar las columnas B y C y luego Styler.applymap para estilos elementwise.

 import pandas as pd import numpy as np data = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC')) #print (data) def highlight_cols(s): color = 'grey' return 'background-color: %s' % color data.style.applymap(highlight_cols, subset=pd.IndexSlice[:, ['B', 'C']]) 

Foto

Si desea más colores o ser más flexible, use Styler.apply(func, axis=None) , la función debe devolver un DataFrame con las mismas tags de índice y columna:

 import pandas as pd import numpy as np data = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC')) #print (data) def highlight_cols(x): #copy df to new - original data are not changed df = x.copy() #select all values to default value - red color df.loc[:,:] = 'background-color: red' #overwrite values grey color df[['B','C']] = 'background-color: grey' #return color df return df data.style.apply(highlight_cols, axis=None) 

pic1

Puedes hacerlo un poco más dinámicamente:

 data = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC')) # dictionary of column colors coldict = {'A':'grey', 'C':'yellow'} def highlight_cols(s, coldict): if s.name in coldict.keys(): return ['background-color: {}'.format(coldict[s.name])] * len(s) return [''] * len(s) data.style.apply(highlight_cols, coldict=coldict) 

introduzca la descripción de la imagen aquí