首页 > 解决方案 > 仅在熊猫数据框中的列表中为某些值着色

问题描述

我有一个数据框,其中一列中的每个单元格都包含一个格式为的列表[2,19,25,39,49]。我想为 list 中包含的每个列表中的单个值着色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)”我不理解预期的形状注释,也不明白模棱两可的事实以及在哪里/如何应用任何( ) 或全部()。是否可以为列表的组件着色。我设法很容易地为整个单元格或单元格的内容着色。我之前没有设计过 Panda 数据框的样式,因此可能是我的问题的“愚蠢”

标签: python-3.xpandasstyling

解决方案


common(您的列表)转换为正则表达式模式:

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

(需要重新导入)。

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

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]

并得到以下结果:

在此处输入图像描述

注意:如果您只想将此格式应用于选定的列,请传递带有“所需”列列表的子集参数。


推荐阅读