如何基于另一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
相关产品推荐
相关产品推荐

