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

如何扩展Pandas样式函数实现基于Index列的多列条件格式

Pandas表格样式扩展解决方案

需求背景

现有如下表格:

Percentage1Percentage2CHECKIndex
0,09%0,15%OKMissing Index
0,11%0,15%OKIndex
0,11%0,15%Missing Index
0,12%0,15%CheckIndex
0,12%0,15%CheckMissing Index

原有color_negative_red_Check函数仅对CHECK列设置格式:

  • 值为Check时文字红色
  • 空值时文字透明
  • 其余值文字绿色

需保留上述逻辑,同时新增规则:当Index列值为Missing Index时,对应行的CHECK和Index列文字颜色设为透明。

解决方案代码

由于原applymap仅处理单个元素,无法获取整行的Index列值,因此改用apply方法按行处理样式:

import pandas as pd

# 构造示例数据(可替换为实际数据)
data = {
    'Percentage1': ['0,09%', '0,11%', '0,11%', '0,12%', '0,12%'],
    'Percentage2': ['0,15%', '0,15%', '0,15%', '0,15%', '0,15%'],
    'CHECK': ['OK', 'OK', pd.NA, 'Check', 'Check'],
    'Index': ['Missing Index', 'Index', 'Missing Index', 'Index', 'Missing Index']
}
df = pd.DataFrame(data)

def style_check_and_index(row):
    # 初始化样式列表,默认无样式
    styles = [''] * len(row)
    # 获取目标列的索引位置
    check_col_pos = row.index.get_loc('CHECK')
    index_col_pos = row.index.get_loc('Index')
    
    # 优先处理Missing Index的条件
    if row['Index'] == 'Missing Index':
        styles[check_col_pos] = 'color: transparent'
        styles[index_col_pos] = 'color: transparent'
    else:
        # 保留原CHECK列的格式逻辑
        check_val = row['CHECK']
        if check_val == 'Check':
            styles[check_col_pos] = 'color: red'
        elif pd.isna(check_val):
            styles[check_col_pos] = 'color: transparent'
        else:
            styles[check_col_pos] = 'color: green'
    
    return styles

# 应用样式,仅针对CHECK和Index列
styled_table = df.style.apply(style_check_and_index, axis=1, subset=['CHECK', 'Index'])
styled_table

代码说明

  1. 改用apply方法:通过axis=1参数实现按行处理,能访问整行数据判断Index列的值
  2. 条件优先级:先判断Missing Index的情况,确保该条件优先于原CHECK列的格式规则
  3. 样式精准控制:通过列索引位置定位目标列,仅修改CHECK和Index列的样式,不影响其他列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:38:16