仅对 pandas 数据框中的列表中的一些值进行着色

2022-09-04 00:00:00 python-3.x pandas styling

问题描述

我有一个数据帧,其中一列中的每个单元格都包含[2,19,25,39,49]格式的列表。我想对列表common = [7,9,16,18,19,20,21,25,33,35,38,40,49]中包含的每个列表中的各个值进行着色,因此在示例19、25和49中应该使用不同的颜色,或者这就是我想要实现的目标。 我已尝试使用:

def color_common(x):
   if x in common:
     color='green'
   else:
     color='black'

我得到的响应是,序列的真值不明确。 如果我使用x.any(),我会得到结果具有形状:(6,) 预期形状:(5,6)&Quot; 我不理解预期的形状注释,也不理解模棱两可的事实以及在哪里/如何应用any()或all()。 我可以很容易地给整个单元格或单元格的内容上色。我以前没有设计过Panda数据帧的样式,因此可能是"我的问题很愚蠢


解决方案

将常见(您的列表)转换为正则表达式模式:

pat = re.compile(r'(' + '|'.join(map(str, common)) + r')')

(需要导入回复)。

然后定义以下格式化函数:

def myFmt(txt):
    return pat.sub(r'<font color="#ff0000">1</font>', repr(txt))
(我假定所需的格式为红色,但将其更改 根据您的需要。)

要以您的方式显示格式的DataFrame,请运行:

df.style.format(myFmt)

为了测试它,我创建了一个包含以下内容的DataFrame:

              A             B
0    [1, 9, 25]  [10, 18, 77]
1    [3, 7, 22]   [4, 21, 27]
2  [11, 16, 29]  [24, 38, 41]

并得到以下结果:

注意:如果要将此格式仅应用于选定的列, 传递子集参数和";所需";列的列表。

相关文章