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

如何基于另一MultiIndex DataFrame条件为目标DataFrame转HTML时着色单元格?

实现MultiIndex DataFrame转HTML并按条件着色

步骤1:构造并预处理DataFrame

先将提供的字符串数据转换为数值型的MultiIndex DataFrame:

import pandas as pd

# 构造原始数据
data1 = {'index1': ['1', '1', '2', '2', '3', '3', '4', '4'], 
         'index2': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'], 
         'Val1': ['0.02642262827', '0.8797893206', '0.1707945866', '0.788045912', '0.803239534', '0.3903782267', '0.8182729864', '0.07671425696'], 
         'Val2': ['0.7940922523', '0.6275405841', '0.6075569809', '0.2292709462', '0.02984363781', '0.9535781396', '0.5034810448', '0.08664072674']}
data2 = {'index1': ['1', '1', '2', '2', '3', '3', '4', '4'], 
         'index2': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'], 
         'Val1': ['0.05', '0.34', '1.66', '0.5', '0.57', '1.89', '1.1', '0.003'], 
         'Val2': ['0.67', '1.3', '0.55', '0.2', '1.56', '0.78', '0.13', '0.43']}

# 转换为MultiIndex结构并将数值列转为float类型
df1 = pd.DataFrame(data1).set_index(['index1', 'index2']).astype(float)
df2 = pd.DataFrame(data2).set_index(['index1', 'index2']).astype(float)

步骤2:定义单元格着色逻辑

创建函数,根据df2对应位置的数值返回单元格背景色样式:

def color_cell(val, row_idx, col_name):
    # 获取df2中当前单元格对应位置的值
    df2_val = df2.loc[row_idx, col_name]
    if df2_val >= 1.5:
        return 'background-color: red'
    elif 1 <= df2_val < 1.5:
        return 'background-color: green'
    else:
        return ''

步骤3:应用样式并导出HTML

利用Pandas的Styler对象遍历单元格应用样式,最终导出HTML:

# 创建df1的Styler对象
styler = df1.style

# 按行应用样式,axis=1表示逐行处理
styler = styler.apply(lambda x: [color_cell(v, x.name, col) for col, v in x.items()], axis=1)

# 生成HTML内容
html_output = styler.to_html()

# 保存到本地文件(可选)
with open('colored_table.html', 'w') as f:
    f.write(html_output)

着色规则说明

生成的HTML表格会严格遵循以下逻辑:

  • df2对应单元格值≥1.5:df1单元格背景设为红色
  • df2对应单元格值在[1,1.5)区间:df1单元格背景设为绿色
  • 其他情况:单元格无背景色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:09:31