仅对 pandas 数据框中列表中的某些值着色

color only some value(s) in a list in pandas dataframe

我有一个数据框,其中一列中的每个单元格都包含一个格式为 [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)" 我不明白预期的形状评论,也不明白模棱两可的事实和 where/how 应用 any() 或 all()。 list.I 的颜色组件是否可以很容易地为整个单元格或单元格的内容着色。我之前没有设计过 Panda 数据框的样式,因此可能是我的问题“愚蠢”

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

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

需要重新导入)。

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

def myFmt(txt):
    return pat.sub(r'<font color="#ff0000"></font>', repr(txt))

(我假设要求的格式是“color red”,但是改变它 随心所欲。)

并以您的方式呈现您的 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]

得到如下结果:

注意:如果您只想将此格式应用于选定的列, 将 subset 参数与“所需”列的列表一起传递。