如何在Python中为Pandas DataFrame生成带颜色编码的交互式分类数据表格?
Python实现带颜色编码的交互式Pandas表格
针对你需要的按用餐情况给1-20编号的DataFrame生成带颜色编码的交互式表格需求,以下两种Python方案可以实现:
方案一:Pandas Styler(适合Jupyter Notebook/Lab环境)
Pandas自带的Styler工具可直接给DataFrame添加样式,支持交互式悬停、排序,完全匹配需求。
步骤1:构造示例数据
假设你的DataFrame包含编号、早餐(1=食用,0=未食用)、午餐(1=食用,0=未食用)三列:
import pandas as pd import numpy as np # 生成1-20编号的示例数据 np.random.seed(42) data = { "编号": range(1, 21), "早餐": np.random.randint(0, 2, 20), "午餐": np.random.randint(0, 2, 20) } df = pd.DataFrame(data)
数据截图说明:表格共20行,编号列从1到20,早餐和午餐列是0或1的随机值。
步骤2:定义颜色编码规则并应用样式
def color_row(row): # 按规则返回行的背景色 if row["早餐"] == 1 and row["午餐"] == 1: return ["background-color: #7ccd7c"] * len(row) # 绿色 elif row["早餐"] == 1 or row["午餐"] == 1: return ["background-color: #ffd700"] * len(row) # 黄色 else: return ["background-color: #ff6347"] * len(row) # 红色 # 生成交互式样式表格 styled_df = df.style.apply(color_row, axis=1) # 在Jupyter中直接显示 styled_df
预期效果截图说明:
- 绿色行:同时食用早餐和午餐的编号行
- 黄色行:仅食用早餐或午餐的编号行
- 红色行:未食用任何一餐的编号行
表格支持交互式排序,还可通过styler.set_table_styles添加筛选控件。
方案二:Plotly交互式表格(支持网页导出/独立展示)
如果需要更灵活的交互功能(如导出为HTML、添加自定义交互事件),可以用Plotly的Table组件。
代码实现
import plotly.graph_objects as go # 生成颜色列表 colors = [] for _, row in df.iterrows(): if row["早餐"] == 1 and row["午餐"] == 1: colors.append("#7ccd7c") elif row["早餐"] == 1 or row["午餐"] == 1: colors.append("#ffd700") else: colors.append("#ff6347") # 创建交互式表格 fig = go.Figure(data=[go.Table( header=dict( values=list(df.columns), fill_color='#1f77b4', font=dict(color='white', size=12), align='left' ), cells=dict( values=[df["编号"], df["早餐"], df["午餐"]], fill_color=[colors, colors, colors], # 每行应用对应颜色 font=dict(color='black', size=11), align='left' ) )]) fig.update_layout(title="用餐情况颜色编码表格") fig.show()
预期效果说明:生成的网页交互式表格支持悬停高亮、缩放、导出为PNG/HTML,行背景色完全符合设定的颜色规则。
内容的提问来源于stack exchange,提问作者gannu
相关产品推荐
相关产品推荐

