繁体   English   中英

如何使用 Pandas styler 实现类似 Excel 的条件格式?

[英]How to use Pandas styler to implement Excel-like conditional formatting?

所需 Excel 格式的屏幕截图

我有 2 列要比较(SO Status & Past_Week_SO)。

当数据与“SO 状态”不同时,我想用红色显示“Past_Week_SO”。

这是我目前的尝试,但不起作用:

df_style = df_master.style.applymap(
    lambda x: 'background-color: %s' % 'yellow' if x != df_master['SO Status'] else
              'background-color: %s' % 'green', subset=df_master['Past_Week_SO'])

使用Styler.apply按条件设置样式的 DataFrame:

def highlight(x):
    c1 = 'background-color: red'
    c2 = ''  
    m = x['Past_Week_SO'] !=  x['SO Status'] 
    df1 = pd.DataFrame(c2, index=x.index, columns=x.columns)
    df1.loc[m, 'Past_Week_SO'] = c1
    return df1

df_master.style.apply(highlight, axis=None)

一个解决方案可能是这样的。

import pandas as pd
import numpy as np

data = pd.DataFrame(np.random.randint(low=1, high=3, size=(7, 2)),
                    columns=['col_' + str(e) for e in range(2)])
print(data)
   col_0  col_1
0      2      2
1      2      2
2      1      1
3      2      1
4      2      2
5      1      2
6      2      1

def change_color(workbook_param, color_hex_code):
    """Returns color format for excelsheet."""
    formatter = workbook_param.add_format({
        'bold': True,
        'text_wrap': True,
        'valign': 'top',
        'fg_color': color_hex_code,
        'border': 1})

    return formatter


import xlsxwriter

with xlsxwriter.Workbook('hello.xlsx') as workbook:
    worksheet = workbook.add_worksheet()

    worksheet.write(0, 0, 'col_0')
    worksheet.write(0, 1, 'col_1')
    for index, row in data.iterrows():
        if row['col_0'] != row['col_1']:
            worksheet.write(index + 1, 0, row['col_0'], change_color(workbook, '#ffb3b3'))
            worksheet.write(index + 1, 1, row['col_1'], change_color(workbook, '#ffb3b3'))

        else:
            worksheet.write(index + 1, 0, row['col_0'], change_color(workbook, '#e3fc03'))
            worksheet.write(index + 1, 1, row['col_1'], change_color(workbook, '#e3fc03'))

这是结果:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM