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

使用Python Pandas高亮Excel两行差异,背景色未显示的技术求助

解决Pandas导出Excel时差异单元格背景色不显示的问题

你的代码存在几个关键问题导致样式没生效:

  • 错误修改原始数据:你直接把DataFrame的单元格值替换成了样式字符串,这会覆盖原始数据,且Pandas的Styler不会识别这种方式设置的样式。
  • 循环逻辑冗余且不对:多层嵌套循环对比行对,不仅效率低,还会重复标记;最后调用style.apply时的逻辑是给整行标色,不是针对差异单元格。
  • 导出时机错误:每次分组循环内都调用to_excel,会覆盖之前的样式设置。

下面是修正后的代码,实现按UNIQUE_ID分组,高亮组内与其他行存在差异的单元格:

import pandas as pd

def highlight_diff_by_column_and_write(dataframe, group_col, output_file):
    df = dataframe.copy()
    
    def highlight_diff(cell_value, row_idx, col_name):
        # 获取当前行所在的分组
        group = df[df[group_col] == df.loc[row_idx, group_col]]
        # 检查当前单元格在组内是否存在不同值
        if len(group[col_name].unique()) > 1:
            # 对比当前单元格与组内其他行的同列值,只要有不同就标红
            if any(group[col_name] != cell_value):
                return 'background-color: #FF0000'
        return ''
    
    # 应用样式:对每个单元格调用highlight_diff函数
    styled_df = df.style.apply(lambda row: [highlight_diff(row[col], row.name, col) for col in df.columns], axis=1)
    # 导出带样式的Excel,关闭索引列避免干扰
    styled_df.to_excel(output_file, engine='openpyxl', index=False)

# 读取数据
input_file = 'OMS-Diff-Reports_20221223.xlsx'
df = pd.read_excel(input_file, 'TBPCRules')
# 生成带高亮的结果
highlight_diff_by_column_and_write(df, 'UNIQUE_ID', 'result.xlsx')

代码说明:

  • 定义highlight_diff函数,判断当前单元格在所属分组内是否存在差异:如果组内该列有多个不同值,且当前单元格与组内其他行同列值存在不同,就返回红色背景样式。
  • 使用style.apply按行遍历,为每个单元格生成对应的样式规则。
  • 最后一次性导出带样式的DataFrame,确保样式正确写入Excel。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:25:27