仅对 pandas 数据框中的列表中的一些值进行着色
问题描述
我有一个数据帧,其中一列中的每个单元格都包含[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]
并得到以下结果:
注意:如果要将此格式仅应用于选定的列, 传递子集参数和";所需";列的列表。相关文章