如何根据pandas中每列的间隙给单元格着色?

问题描述 投票:0回答:1

我有一个如下所示的数据框。

A  B  C  D  E
1  1  2  3  -4
a  3  4  5  5
1  2  3  2  9
b  3 4  4  nan

当 A 列中的值是数字时,我想根据 A 列和另一列之间的差异用颜色填充每个单元格。

例如,如果A列的GAP是10或更多,我想用蓝色填充它, 如果 GAP 为 -10 或更小,我想用红色填充它。我该如何编码?

python pandas openpyxl
1个回答
2
投票

您可以将

style
与自定义函数一起使用:

import numpy as np

def color(df, subset=['B', 'C', 'D'], up=10, low=-10):
    tmp = df[subset].sub(pd.to_numeric(df['A'], errors='coerce'), axis=0)
    return pd.DataFrame(np.select([tmp.gt(up), tmp.lt(low)],
                                  ['background-color: blue',
                                   'background-color: red'],
                                  None), columns=subset, index=df.index
                       ).reindex_like(df)

df.style.apply(color, axis=None)

输出(使用不同的输入):

对子集和阈值进行硬编码:

def color(df):
    tmp = df[['B', 'C', 'D']].sub(pd.to_numeric(df['A'], errors='coerce'), axis=0)
    return pd.DataFrame(np.select([tmp.gt(10), tmp.lt(-10)],
                                  ['background-color: blue',
                                   'background-color: red'],
                                  None), columns=subset, index=df.index
                       ).reindex_like(df)
© www.soinside.com 2019 - 2024. All rights reserved.