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

如何基于条件为Pandas多级索引中的二级C列设置背景色

解决DataFrame多索引列中指定列的单元格背景色设置问题

需求说明

为DataFrame多索引结构中所有后缀为c的列设置单元格背景色:

  • 正数单元格背景设为绿色
  • 负数单元格背景设为红色
  • 0值单元格背景设为黄色

修正后的代码

import pandas as pd

df = pd.DataFrame(data=[[100,200,400,500,222,222], [77,28,110,211,222,222], [11,22,33,11,22,33],[213,124,136,147,54,56]])
df.columns = pd.MultiIndex.from_product([['x', 'y', 'z'], list('ab')])

# 计算各分组的c列值并排序列
for c in df.columns.levels[0]:
    df[(c, 'c')] = df[(c, 'a')].sub(df[(c, 'b')])
df = df.sort_index(axis=1)

def color_cell(val):
    if val < 0:
        return 'background-color: red'
    elif val > 0:
        return 'background-color: green'
    elif val == 0:
        return 'background-color: yellow'
    return ''

# 选择所有后缀为c的列作为目标子集
subset = pd.IndexSlice[:, (slice(None), 'c')]
# 使用applymap处理单个单元格样式
styled_df = df.style.applymap(color_cell, subset=subset)

# 展示样式化后的表格
styled_df

关键修改点

  • 替换style.apply()为style.applymap():apply用于整行/整列的批量样式处理,applymap专门针对单个单元格的值做样式映射,匹配需求场景。
  • 修正样式属性名:将原代码中的background改为标准CSS属性background-color,确保样式正常生效。
  • 优化子集选择逻辑:用pd.IndexSlice[:, (slice(None), 'c')]精准定位所有一级索引下的c列。
  • 补充函数默认返回值:确保无匹配条件时返回空字符串,避免因返回None导致样式异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:40:34