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

如何基于相邻行值为Dash DataTable单元格设置自定义颜色高亮?

实现Dash DataTable相邻行对比的单元格颜色定制

当然可以实现,核心是通过Pandas提前计算每个单元格与下一行同列值的对比关系,再生成Dash DataTable支持的style_data_conditional条件格式规则。以下是具体步骤和代码示例:

步骤说明

  1. 预处理数据:用Pandas计算每一列中当前行与下一行的差值,以此判断颜色规则(大于下一行设绿色,小于设红色,相等保持默认黑色)。
  2. 生成条件规则:遍历所有需要判断的单元格(除最后一行,因为无下一行可对比),根据差值结果生成对应的格式规则。
  3. 渲染DataTable:将规则传入style_data_conditional参数,完成定制化渲染。

完整代码示例

import dash
from dash import dash_table, html
import pandas as pd

# 1. 准备示例数据
df = pd.DataFrame({
    'A': [10, 8, 12, 12],
    'B': [5, 7, 5, 3],
    'C': [15, 15, 10, 18]
})

# 2. 生成条件格式规则
style_conditions = []

# 遍历每一列
for col in df.columns:
    # 计算当前行与下一行的差值(当前行 - 下一行)
    diffs = df[col].diff(-1)
    # 遍历每一行(排除最后一行)
    for idx in range(len(df) - 1):
        diff = diffs.iloc[idx]
        if diff > 0:
            # 当前值大于下一行,文本绿色
            style_conditions.append({
                'if': {
                    'row_index': idx,
                    'column_id': col
                },
                'color': 'green'
            })
        elif diff < 0:
            # 当前值小于下一行,文本红色
            style_conditions.append({
                'if': {
                    'row_index': idx,
                    'column_id': col
                },
                'color': 'red'
            })
        # 相等时不添加规则,保持默认黑色

# 3. 构建Dash应用
app = dash.Dash(__name__)

app.layout = html.Div([
    dash_table.DataTable(
        data=df.to_dict('records'),
        columns=[{'name': col, 'id': col} for col in df.columns],
        style_data_conditional=style_conditions,
        # 可选:添加一些基础样式优化显示
        style_cell={
            'textAlign': 'center',
            'padding': '8px'
        }
    )
])

if __name__ == '__main__':
    app.run_server(debug=True)

关键细节

  • df.diff(-1):计算当前行与下一行的差值(若为正,当前行值更大;负则更小;零则相等)。
  • 排除最后一行:因为最后一行没有下一行数据,无需对比设置颜色。
  • 规则灵活性:如果需要扩展其他样式(比如背景色、字体加粗),只需在规则字典中添加对应的CSS属性即可。

内容的提问来源于stack exchange,提问作者Fab.B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:55:19