使用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
相关产品推荐
相关产品推荐

