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

如何在Pandas中基于列间差值为单元格着色?

实现DataFrame按条件单元格着色的方案

1. 构造示例DataFrame

首先先还原你提供的数据集:

import pandas as pd

data = {
    'A': [1, 'a', 1, 'b'],
    'B': [1, 3, 2, 3],
    'C': [2, 4, 3, 4],
    'D': [3, 5, 2, 4],
    'E': [-4, 5, 9, pd.NA]
}
df = pd.DataFrame(data)

2. 编写自定义样式函数

通过Pandas的style模块实现条件着色逻辑:

def color_cells(df):
    # 创建与原DataFrame结构一致的空样式矩阵,初始值为空字符串
    styles = pd.DataFrame('', index=df.index, columns=df.columns)
    
    # 筛选A列值为数字的行(无法转为数字的会被标记为NaN)
    numeric_rows = pd.to_numeric(df['A'], errors='coerce').notna()
    
    for idx in df.index:
        if numeric_rows[idx]:
            a_value = df.loc[idx, 'A']
            # 计算当前行B-E列与A列的差值
            gaps = df.loc[idx, 'B':] - a_value
            
            # 按差值条件设置背景色
            styles.loc[idx, gaps >= 10] = 'background-color: blue'
            styles.loc[idx, gaps <= -10] = 'background-color: red'
    
    return styles

# 应用样式并展示
styled_table = df.style.apply(color_cells, axis=None)
styled_table

关键说明

  • 用pd.to_numeric(errors='coerce')判断A列是否为数字:能转换为数值的保留原值,无法转换的变为NaN,再通过notna()筛选目标行。
  • 针对符合条件的行,计算其他列与A列的差值,根据阈值设置对应CSS背景色。
  • 如果需要保存带样式的表格,可使用styled_table.to_html('colored_table.html')导出为HTML文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:02:42