如何按变量分组为Pandas DataFrame设置不同的行背景色
实现方案
步骤1:构造目标统计DataFrame(可直接运行复现你的场景)
import seaborn as sns import pandas as pd # 加载diamonds数据集 diamonds = sns.load_dataset("diamonds") stat_res = [] # 统计三个低基数列的计数、占比,构造你描述的DataFrame格式 for var in ["cut", "color", "clarity"]: count_ser = diamonds[var].value_counts().sort_index() pct_ser = (count_ser / len(diamonds) * 100).round(2) # 仅分组首行填充Variable列值 first_row_flag = True for cls, cnt, pct in zip(count_ser.index, count_ser.values, pct_ser.values): stat_res.append({ "Variable": var if first_row_flag else "", "Class": cls, "Count": cnt, "Percentage %": pct }) first_row_flag = False df = pd.DataFrame(stat_res)
步骤2:按Variable分组设置统一背景色
核心逻辑:先给每行映射对应的分组标识,再给不同分组分配差异化背景色,全局应用样式即可。
# 生成每行对应的分组标识(把Variable列空值向前填充) row_group = df["Variable"].replace("", pd.NA).ffill() # 自定义分组和背景色的映射,可自行替换为你需要的颜色 group_color = { "cut": "#f5f5f5", "color": "#e3f2fd", "clarity": "#e8f5e9" } # 定义样式应用函数 def set_group_bg(row): current_group = row_group[row.name] bg = group_color[current_group] # 所有列都应用该背景色 return [f"background-color: {bg}" for _ in row] # 应用样式,Jupyter环境可直接渲染显示带背景色的表格 styled_df = df.style.apply(set_group_bg, axis=1) styled_df
补充说明
- 如果需要导出到Excel保留背景色,可执行
styled_df.to_excel("diamonds_stat.xlsx", engine="openpyxl", index=False) - 颜色支持十六进制、rgb等多种格式,建议选择浅色系避免遮盖文字内容
- 如果后续新增Variable分组,直接在
group_color字典里新增键值对即可
内容的提问来源于stack exchange,提问作者Ailurophile
相关产品推荐
相关产品推荐

