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

基于跨列对比的Pandas DataFrame批量条件格式设置问题

批量实现DataFrame多列条件格式设置

核心思路

  1. 提取col1到col50每列对应的参考列映射(即各列最后一行的内容)
  2. 编写自定义样式函数,自动匹配每列的参考列并应用三色条件格式
  3. 通过style.apply批量将样式应用到目标列

完整代码实现

import pandas as pd
import numpy as np

# 定义需要处理的目标列:col1到col50
target_cols = [f'col{i}' for i in range(1, 51)]

# 获取每列对应的参考列映射(取DataFrame最后一行的内容)
ref_mapping = data.iloc[-1][target_cols].to_dict()

def highlight_column(col):
    # 获取当前列对应的参考列名
    ref_col_name = ref_mapping[col.name]
    # 获取参考列的数据
    ref_col = data[ref_col_name]
    
    # 生成样式数组:仅处理除最后一行外的所有行(最后一行是参考列名,无需格式化)
    row_mask = np.arange(len(col)) < len(col) - 1
    styles = np.where(row_mask, '', '')
    
    # 应用三色条件:大于参考列标绿,小于标红,相等标黄
    styles[row_mask] = np.where(
        col.iloc[:-1] > ref_col.iloc[:-1],
        'background-color: green',
        np.where(
            col.iloc[:-1] < ref_col.iloc[:-1],
            'background-color: red',
            'background-color: yellow'
        )
    )
    return styles.tolist()

# 批量应用样式到目标列,其他列保持原样
styled_df = data.style.apply(highlight_column, subset=target_cols)

# 展示格式化后的表格
styled_df

关键说明

  • 效率优化:用numpy.where替代循环,适配大型DataFrame的快速处理需求
  • 范围控制:通过subset=target_cols确保仅处理col1到col50,不干扰A1、B1等其他列
  • 边界处理:自动排除最后一行(参考列名行)的格式化,避免逻辑混乱

内容的提问来源于stack exchange,提问作者Shiva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:03:15