2 votes

Mettre en évidence une ligne dans un cadre de données en fonction de la valeur d'une colonne ?

Disons que j'ai un cadre de données comme celui-ci :

     col1    col2          col3       col4
0    A        A_1          pass        2
1    A        A_2          pass        4
2    A        A_1          fail        4
3    A        A_1          fail        5
4    A        A_1          pass        3
5    A        A_2          fail        2

Je veux l'enregistrer en tant que fichier Excel, et lorsque je l'ouvrirai, je voudrais que les colonnes soient surlignées comme ci-dessous, comment puis-je faire ?

Desirable output

2voto

jezrael Points 290608

Vous pouvez créer des DataFrame de styles avec Styler.apply et définir les rangs par des masques avec DataFrame.mask :

def color(x): 
   c1 = 'background-color: green'
   c2 = 'background-color: red'
   c = ''
   m1 = x.col3.eq('pass')
   m2 = x.col3.eq('fail')

   df1 = pd.DataFrame(c, index=x.index, columns=x.columns)
   df1 = df1.mask(m1, c1).mask(m2, c2)
   return df1

df.style.apply(color,axis=None).to_excel('styled.xlsx', engine='openpyxl', index=False)

1voto

Arkadiusz Points 788

Vous pouvez également procéder de la sorte :

from openpyxl import load_workbook
from openpyxl.styles import PatternFill

df.to_excel('my dataframe.xlsx', index=False)
wb = load_workbook('my dataframe.xlsx')
ws = wb.active

for row in ws.iter_rows(min_col=ws.min_column, max_col=ws.max_column,
                        min_row=ws.min_row+1, max_row=ws.max_row):
    for value in row:
        if row[2].value == 'pass':
            value.fill = PatternFill(fill_type='solid', start_color='00b300', end_color='00b300')
        else:
            value.fill = PatternFill(fill_type='solid', start_color='ff0000', end_color='ff0000')

wb.save('my dataframe.xlsx')

Résultat :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X