问题描述
我有一个数据框,其中一列中的每个单元格都包含格式为[2,19,25,39,49]
的列表。我想为列表common = [7,9,16,18,20,21,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)“ 我不了解预期的形状注释,模棱两可的真相以及在何处/如何应用any()或all()。 可以为列表的各个元素上色吗?我很容易为整个单元格或单元格的内容上色。在可能出现“我的问题愚蠢”之前,我还没有设置过熊猫数据框的样式
解决方法
将 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)
为了对其进行测试,我创建了一个包含以下内容的数据框:
A B
0 [1,9,25] [10,18,77]
1 [3,7,22] [4,21,27]
2 [11,16,29] [24,38,41]
并得到以下结果:
注意:如果您只想将此格式应用于选定的列, 通过带有列的列表的 subset 参数。