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

如何优化Pandas DataFrame条件格式化代码,适配动态列?

解决方案

1. 统一管理参考值映射

先把分散的参考值变量整理成列名-参考值的字典,直接和DataFrame的列对应,从根源解决动态适配问题:

import numpy as np
import pandas as pd

# 构建目标DataFrame
df = pd.DataFrame({'patient': {0: 'Mark', 1: 'Susan', 2: 'Andy', 3: 'Paula'},
                   'blood pressure': {0: 45, 1: 36, 2: 35, 3: 92},
                   'heart rate': {0: 60, 1: 65, 2: 98, 3: 59},
                   'pulse': {0: 70, 1: 70, 2: 45, 3: 76},
                   'weight': {0: 150, 1: 180, 2: 200, 3: 210},
                   'height': {0: 178, 1: 170, 2: 165, 3: 168},
                   'oxygen': {0: 92, 1: 99, 2: 96, 3: 97}})

# 列名与参考值的映射字典
ref_values = {
    'blood pressure': 36,
    'heart rate': 70,
    'pulse': 60,
    'weight': 180,
    'height': np.nan,
    'oxygen': 96
}
# 无关变量cholesterol直接忽略即可

2. 编写通用高亮函数

写一个复用性强的函数,接收单列数据和对应参考值,返回每个单元格的样式规则(可按需调整高亮逻辑):

def highlight_column(col):
    # 获取当前列的参考值,无对应值则返回空样式
    ref = ref_values.get(col.name, None)
    if pd.isna(ref):
        return [''] * len(col)
    
    # 定义高亮规则:低于参考值红背景,高于绿背景,等于无样式
    styles = []
    for val in col:
        if val < ref:
            styles.append('background-color: #ffcccc')
        elif val > ref:
            styles.append('background-color: #ccffcc')
        else:
            styles.append('')
    return styles

3. 统一应用样式

用Styler.apply()按列批量处理,自动筛选数值列,新增列只需在ref_values中添加对应条目即可自动适配,不存在的列直接跳过:

# 仅对数值列应用样式,排除非数值列(如patient)
styled_df = df.style.apply(highlight_column, subset=df.select_dtypes(include=['int64', 'float64']).columns)

# Jupyter环境直接运行显示,本地可导出为HTML保存
styled_df

核心优势

  • 消除冗余:无需多次调用applymap,一次操作处理所有目标列
  • 动态适配:新增列时仅需补充ref_values;列不存在时自动跳过,不会触发报错
  • 易于维护:高亮规则可在highlight_column中统一修改,无需逐个调整列逻辑

内容的提问来源于stack exchange,提问作者Steve..Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:43:21