如何通过循环批量为DataFrame分数设置对应文本颜色(简化重复代码)
优化DataFrame分数单元格颜色批量设置方案
核心思路
把颜色判断逻辑封装成可复用的函数,通过pandas Styler的批量处理方法,一次性应用到所有需要设置颜色的列/单元格,彻底消除重复的if-elif-else代码。
步骤1:构造示例数据(可替换为你的实际DataFrame)
import pandas as pd # 宽表结构:姓名为行,各指标为列,单元格对应分数 data = { "姓名": ["张三", "李四", "王五"], "Sleep": [4.2, 5.5, 5.0], "注意力": [2.0, 4.5, 3.0], "记忆力": [3.5, 1.8, 4.2] } df = pd.DataFrame(data)
步骤2:封装颜色判断函数
def get_cell_color(score, indicator): if indicator == "Sleep": if score < 5: return "background-color: red" elif score > 5: return "background-color: green" return "background-color: white" else: if score < 2.5: return "background-color: red" elif score > 4: return "background-color: green" return "background-color: white"
步骤3:批量应用样式到所有指标列
# 筛选出需要处理的指标列(排除姓名列) indicator_cols = df.columns.drop("姓名") # 使用applymap遍历指定列的每个单元格,传入分数和对应指标列名 styled_df = df.style.applymap( lambda x, col: get_cell_color(x, col), subset=indicator_cols, col=indicator_cols ) # Jupyter环境中直接运行即可显示样式化后的表格 styled_df
针对长表结构的处理方案
如果你的DataFrame是长表(包含姓名、指标、分数三列),可以用以下方式批量设置:
# 长表示例数据 long_data = { "姓名": ["张三", "张三", "李四", "李四", "王五", "王五"], "指标": ["Sleep", "注意力", "Sleep", "记忆力", "Sleep", "注意力"], "分数": [4.2, 2.0, 5.5, 1.8, 5.0, 3.0] } long_df = pd.DataFrame(long_data) # 按行遍历,针对分数列应用颜色判断 styled_long_df = long_df.style.apply( lambda row: ["" if col != "分数" else get_cell_color(row["分数"], row["指标"]) for col in long_df.columns], axis=1 ) styled_long_df
内容的提问来源于stack exchange,提问作者kgall89
相关产品推荐
相关产品推荐

