J'ai essayé d'écrire une fonction à utiliser avec le style pandas. Je veux des colonnes hautes que je spécifie dans les arguments. Ce n'est pas très élégant mais par exemple:
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]
puis appelez avec:
data.style.apply(highlight_cols(cols=['B','C']))
J'obtiens une erreur: ("L'objet 'Series' n'a pas d'attribut 'colonnes'")
Je pense que fondamentalement, je ne comprends pas très bien comment le styler appelle et applique la fonction.
Merci,
Je pense que vous pouvez utiliser Slicing in Styles
pour certaines colonnes B
et C
puis Styler.applymap
Pour les styles élémentaires.
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']])
Si vous voulez plus de couleurs ou être plus flexible, utilisez Styler.apply(func, axis=None)
, la fonction doit retourner un DataFrame
avec les mêmes étiquettes d'index et de colonne:
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)
Vous pouvez le faire de manière plus dynamique:
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)