根据列值突出显示数据框中的行?

时间:2021-05-14 12:02:09

标签: python excel pandas dataframe

假设我有这样的数据框:

     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

我想把它保存为一个excel文件,然后当我打开它时我想像下面那样突出显示列,我该怎么做?

Desirable output

2 个答案:

答案 0 :(得分:2)

您可以使用 Styler.apply 创建样式的 DataFrame 并使用 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)

答案 1 :(得分:1)

你也可以这样做:

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')

结果:

enter image description here