【问题标题】:How to use Pandas styler to implement Excel-like conditional formatting?如何使用 Pandas 样式器实现类似 Excel 的条件格式?
【发布时间】:2021-07-09 08:52:08
【问题描述】:

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

当数据与“SO Status”不同时,我想用红色显示“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'])

【问题讨论】:

  • 您需要提供更多上下文,您使用哪些库/模块来建模您的 excel 文件?
  • 我正在使用 pandas 库
  • 啊,非常有帮助,谢谢。直到今天我才遇到样式/样式器模块。显然,自 2015 年 v 0.17 左右以来,它一直是 around

标签: python excel pandas pandas-styles


【解决方案1】:

使用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)

【讨论】:

  • 这个方法很好用 :) 谢谢jezrael!
【解决方案2】:

解决方案可能是这样的。

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

结果如下:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2012-10-31
    • 2015-07-31
    • 1970-01-01
    • 2011-08-03
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多