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)
代码说明
- 当
style.apply指定axis=1时,函数会逐行接收DataFrame的行数据(以Series形式),直接在函数内计算当前行的ALARM数量,避免外部变量干扰。 - 根据计数返回对应颜色的列表,列表长度与列数一致,确保整行所有单元格都应用同一种背景色。
- 无需循环遍历行,一次
apply即可完成所有行的样式设置,最后只显示一次就能得到统一的带样式表格。
效果对应
- 第0行(1个ALARM)→ 黄色背景
- 第1行(3个ALARM)→ 红色背景
- 第2行(0个ALARM)→ 绿色背景
- 第3行(2个ALARM)→ 橙色背景
内容的提问来源于stack exchange,提问作者ibdbpadw
相关产品推荐
相关产品推荐

