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

如何为Pandas DataFrame按行内参考值设置单元格背景色?

解决方案

要实现每行参考值不同的单元格背景着色,核心是先提取需要对比的数值,再按行生成对比掩码,最后通过Pandas的Styler模块应用样式。

完整代码

import pandas as pd

# 示例数据
df = pd.DataFrame({'Reference': ['40%','30%'],
                  'colA': ['30% (20%)','25% (14%)'],
                  'colB': ['45% (20%)','25% (30%)'],
                  'colC': ['25% (30%)','35% (30%)']})

# 1. 提取百分比数值并转为浮点型
def extract_percent(val):
    # 提取开头的数字部分(括号外的百分比)
    return float(val.str.extract(r'^(\d+)%')[0])

# 处理参考值列
ref_values = extract_percent(df['Reference'])
# 处理需要对比的列(colA/colB/colC)
comp_cols = ['colA', 'colB', 'colC']
comp_values = df[comp_cols].apply(extract_percent, axis=1)

# 2. 生成对比掩码:提取值 < 参考值时为True(需要标绿)
mask = comp_values.lt(ref_values, axis=0)

# 3. 定义样式函数
def highlight_cells(styler_df):
    # 创建空样式矩阵
    style_matrix = pd.DataFrame('', index=styler_df.index, columns=styler_df.columns)
    # 对掩码为True的单元格设置绿色背景
    style_matrix[mask] = 'background-color: #90EE90'  # 浅绿色更易读
    return style_matrix

# 应用样式到目标列,保留原数据显示
styled_df = df.style.apply(highlight_cells, axis=None).format(precision=0)
# Jupyter环境中直接运行即可看到渲染效果
styled_df

关键步骤说明

  • 数值提取:用正则表达式^(\d+)%匹配每个单元格开头的百分比数字,转为浮点型后才能进行数值对比。
  • 按行对比:使用lt(ref_values, axis=0)让每行的colA-C数值与该行的Reference值逐一对比,生成布尔掩码矩阵。
  • 样式应用:通过Styler.apply将样式矩阵应用到原DataFrame,只给掩码为True的单元格设置绿色背景。

效果匹配

运行后会完全符合预期:

  • 第一行:colA(30% < 40%)、colC(25% < 40%)背景为绿色
  • 第二行:colA(25% < 30%)、colB(25% < 30%)背景为绿色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:55:06