You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XlsxWriter为Pandas DataFrame设置整列条件格式及差值高亮

刚好我之前也处理过类似的Excel格式需求,给你详细拆解这两个问题的解决方案:

问题1:为整列应用条件格式

XlsxWriter本身就支持直接引用整列,不用非得写死具体的行号范围(比如B3:K12这种)。你只需要用列字母加冒号的格式来指定整列,比如B:B代表整个B列,D:D代表整个D列。

不过要注意一个细节:如果你DataFrame的第一行是表头,整列引用会把表头也包含进去。如果不想格式化表头,可以用B2:B这种写法,代表从B列第2行开始到最后一行的所有单元格。

给你个完整的代码示例:

import pandas as pd

# 创建示例DataFrame
data = {
    'A': ['项目1', '项目2', '项目3', '项目4'],
    'B': [100, 120, 90, 150],
    'C': [90, 110, 100, 140]
}
df = pd.DataFrame(data)

# 初始化ExcelWriter,指定引擎为XlsxWriter
with pd.ExcelWriter('output.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    worksheet = writer.sheets['Sheet1']
    
    # 为整个B列应用条件格式(包含表头)
    format1 = writer.book.add_format({'bg_color': '#FFC7CE'})
    worksheet.conditional_format('B:B', {
        'type': 'cell',
        'criteria': '>',
        'value': 100,
        'format': format1
    })
    
    # 为C列从第2行开始应用条件格式(跳过表头)
    format2 = writer.book.add_format({'bg_color': '#C6EFCE'})
    worksheet.conditional_format('C2:C', {
        'type': 'cell',
        'criteria': '<',
        'value': 100,
        'format': format2
    })
问题2:当B列与C列差值超过15%时标记B列为红色

这里首先要明确“差值超过15%”的计算逻辑——通常是指相对差值,也就是两个值的差的绝对值,除以基准值(比如以C列为基准)大于15%。对应的Excel公式应该是:
=ABS(B1-C1)/C1>0.15

为什么用B1和C1?因为条件格式的公式是相对于你应用范围的第一个单元格的,当你把格式应用到B列时,XlsxWriter会自动把公式里的行号对应到每一行。

如果你的基准是B列,公式就改成=ABS(B1-C1)/B1>0.15,根据你的实际需求调整就行。

下面是实现这个需求的代码示例:

import pandas as pd

data = {
    'A': ['项目1', '项目2', '项目3', '项目4'],
    'B': [100, 130, 90, 160],
    'C': [90, 110, 100, 140]
}
df = pd.DataFrame(data)

with pd.ExcelWriter('output.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    worksheet = writer.sheets['Sheet1']
    
    # 创建红色字体格式
    red_format = writer.book.add_format({'font_color': '#FF0000'})
    
    # 应用条件格式到B列(从第2行开始,跳过表头)
    worksheet.conditional_format('B2:B', {
        'type': 'formula',
        'criteria': '=ABS(B1-C1)/C1>0.15',  # 以C列为基准的相对差值超过15%
        'format': red_format
    })

这里要注意:公式里的行号1对应你应用范围的第一行(也就是B2),因为条件格式的公式是相对引用,XlsxWriter会自动帮你把每一行的公式对应成B2-C2、B3-C3等等,不用手动修改行号。

内容的提问来源于stack exchange,提问作者lte__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:39:06