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

Python pandas基于附加列条件高亮单元格值并导出Excel方法

实现方案

整体流程分三步:先筛选目标列,再通过pandas Styler实现单元格高亮样式,最后导出为带格式的Excel文件,具体实现如下:

前置说明

  • 原示例代码存在拼写错误:pd.Dataframe正确写法为pd.DataFrame
  • 导出带格式的Excel需要依赖openpyxl库,提前执行pip install openpyxl安装即可

完整代码

import pandas as pd

# 构造原始DataFrame
names = pd.DataFrame({
    'name': ['ben','adam','steve'],
    'name1':['ben1','adam1','steve1'],
    'name2':['ben2','adam2','steve2'],
    'name3':['ben3','adam3','steve3'],
    'name1_comp':[1,0,1],
    'name2_comp':[0,1,1],
    'name3_comp':[0,1,1]
})

# 筛选需要保留的4列
df_res = names[['name', 'name1', 'name2', 'name3']].copy()

# 定义高亮样式:匹配目标单元格设置浅黄色背景,颜色值可按需替换
def set_highlight(data):
    style = pd.DataFrame('', index=data.index, columns=data.columns)
    # 根据原表comp列的标记匹配高亮位置,和需要高亮的单元格完全对应
    for row_idx in data.index:
        if names.loc[row_idx, 'name1_comp'] == 1:
            style.loc[row_idx, 'name1'] = 'background-color: #fff3b0'
        if names.loc[row_idx, 'name2_comp'] == 1:
            style.loc[row_idx, 'name2'] = 'background-color: #fff3b0'
        if names.loc[row_idx, 'name3_comp'] == 1:
            style.loc[row_idx, 'name3'] = 'background-color: #fff3b0'
    return style

# 应用样式
styled_table = df_res.style.apply(set_highlight, axis=None)

# 导出到Excel,index=False表示不导出行索引
styled_table.to_excel('result.xlsx', engine='openpyxl', index=False)

可选实现:直接按值匹配高亮

如果不想依赖原表的*_comp列判断,也可以直接把需要高亮的值存入集合,遍历单元格匹配即可,替换上面的set_highlight函数为下面的实现即可:

target_values = {'ben1', 'adam2', 'adam3', 'steve1', 'steve2', 'steve3'}
def set_highlight(data):
    style = pd.DataFrame('', index=data.index, columns=data.columns)
    for col in data.columns:
        for row_idx in data.index:
            if data.loc[row_idx, col] in target_values:
                style.loc[row_idx, col] = 'background-color: #fff3b0'
    return style

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 00:12:16