Pandas 样式:按绝对值有条件地更改列的背景颜色

aha*_*yev 4 python colors pandas pandas-styles

我有熊猫数据框,我想根据绝对值给出背景渐变颜色。想象一下,我的期望值是数据框 A 列中的 6。随着数字从期望值移动,背景渐变颜色在两个方向上以绝对值相同的方式变化(无论正负方向)。

以下帖子接近我想要的内容,但这些案例颜色不考虑绝对值。熊猫样式背景渐变行和列,还有熊猫文档http://pandas.pydata.org/pandas-docs/stable/user_guide/style.html

我创建了最小代码:

import pandas as pd

colum1 = [-1,0,1,2,3,4,5,6,7,8,9,10,11,12]

df = pd.DataFrame(data=colum1,columns=["A"])
Run Code Online (Sandbox Code Playgroud)

我在excel中创建了预期的输出作为图像。我想从代码中获得类似的输出。绝对值的背景梯度变化

小智 6

我面临着类似的任务,经过很少的“研究”,我找到了解决方案。

from matplotlib import colors
import seaborn as sns

def b_g(s):
    cm=sns.light_palette("red", as_cmap=True)
    max_val = max(s.max(), abs(s.min()))
    norm = colors.Normalize(0,max_val)
    normed = norm(abs(s.values))
    c = [colors.rgb2hex(x) for x in plt.cm.get_cmap(cm)(normed)]
    return ['background-color: %s' % color for color in c]
Run Code Online (Sandbox Code Playgroud)

b_g 函数允许您根据数据帧数据生成自cm=sns.light_palette("red", as_cmap=True)定义颜色图,并有助于自定义颜色。

在数据帧上应用这个函数看起来像:

dataframe.style.apply(b_g)
Run Code Online (Sandbox Code Playgroud)

这里的技巧在于使用 abs() 函数,当计算来自数据帧的数据的归一化值时。 示例结果

文档链接:https : //seaborn.pydata.org/generated/seaborn.light_palette.html https://pandas.pydata.org/pandas-docs/version/0.18/style.html