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

Pandas DataFrame按列阈值设置单元格样式报错求助

问题解决:DataFrame单元格阈值样式设置报错

错误原因分析

  1. axis=None参数错误:DataFrame的apply方法仅支持axis=0(按列处理)或axis=1(按行处理),传入axis=None会因参数不合法抛出ValueError: No axis named None。
  2. Series索引不匹配:使用默认axis=0时,函数接收的是每一列的Series(索引为行标签如fa_ha),而threshold_df.loc['Upper']的索引是列名,两者索引无法匹配,导致比较时抛出ValueError: Can only compare identically-labeled Series objects。

正确实现方案

步骤1:准备数据(复现场景用)

import pandas as pd
import numpy as np

# 主数据DataFrame
maindf = pd.DataFrame({
    'CPU(%)': [52.66, 93.18, 69.70],
    'CPU_User(%)': [45.16, 79.46, 60.19],
    'CPU_System(%)': [7.68, 15.26, 7.37],
    'CPU_IO(%)': [7.14, 7.87, 2.20]
}, index=['fa_ha', 'fa_pri', 'opt3'])

# 阈值DataFrame
threshold_df = pd.DataFrame({
    'CPU(%)': [65, 95],
    'CPU_User(%)': [5, 10],
    'CPU_System(%)': [20, 30],
    'CPU_IO(%)': [40, 50]
}, index=['Lower', 'Upper'])

步骤2:编写样式函数并调用

def bounded_highlights(col):
    # 获取当前列的上下阈值
    lower = threshold_df[col.name]['Lower']
    upper = threshold_df[col.name]['Upper']
    # 设置条件与对应样式:高于上阈值红,低于下阈值绿,中间黄
    conds = [
        col > upper,
        col < lower
    ]
    styles = [
        'color: red',
        'color: green'
    ]
    return np.select(conds, styles, default='color: yellow')

# 按列应用样式函数
styler_object = maindf.style.apply(bounded_highlights, axis=0)
# 渲染查看结果
styler_object

代码说明

  • 按列处理:通过axis=0指定按列处理,函数每次接收一列数据(Series),col.name获取当前列名,以此匹配阈值DataFrame中的对应列阈值。
  • 条件判断:先判断是否高于上阈值(红色),再判断是否低于下阈值(绿色),剩余介于阈值之间的单元格默认设为黄色,完全匹配需求。
  • 索引匹配:用列名定位阈值得到标量值,与当前列的每个单元格值直接比较,避免了Series索引不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:55:23