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

Pandas DataFrame按行内ALARM次数设背景色异常问题排查

根据每行'ALARM'出现次数为Pandas DataFrame整行设置背景色

你当前代码的问题在于:num_alarms函数依赖外部循环的num变量,但style.apply是批量处理所有行,最终所有行都会使用最后一次循环的num值上色;同时循环里每次创建新样式对象并显示,会输出多个分散的表格,完全不符合需求。

正确实现代码

import pandas as pd

# 复现DataFrame
data = {'A': ['ALARM', 'ALARM', 'krish', 'Peter'],
        'B': ['Tom', 'ALARM', 'krish', 'ALARM'],
        'C': ['Jack', 'ALARM', 'krish', 'ALARM'],}
df = pd.DataFrame(data)

def num_alarms(row):
    # 计算当前行的ALARM出现次数
    alarm_count = (row == 'ALARM').sum()
    # 定义颜色样式
    red = 'background-color: red;'
    orange = 'background-color: orange;'
    yellow = 'background-color: yellow;'
    green = 'background-color: green;'
    
    # 根据次数返回对应整行的颜色列表
    if alarm_count == 3:
        return [red] * len(row)
    elif alarm_count == 2:
        return [orange] * len(row)
    elif alarm_count == 1:
        return [yellow] * len(row)
    else:
        return [green] * len(row)

# 按行应用样式并显示
styled_df = df.style.apply(num_alarms, axis=1)
display(styled_df)

代码说明

  1. 当style.apply指定axis=1时,函数会逐行接收DataFrame的行数据(以Series形式),直接在函数内计算当前行的ALARM数量,避免外部变量干扰。
  2. 根据计数返回对应颜色的列表,列表长度与列数一致,确保整行所有单元格都应用同一种背景色。
  3. 无需循环遍历行,一次apply即可完成所有行的样式设置,最后只显示一次就能得到统一的带样式表格。

效果对应

  • 第0行(1个ALARM)→ 黄色背景
  • 第1行(3个ALARM)→ 红色背景
  • 第2行(0个ALARM)→ 绿色背景
  • 第3行(2个ALARM)→ 橙色背景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:24:50