python-3.x - 仅在熊猫数据框中的列表中为某些值着色
问题描述
我有一个数据框,其中一列中的每个单元格都包含一个格式为的列表[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 数据框的样式,因此可能是我的问题的“愚蠢”
解决方案
将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]
并得到以下结果:
注意:如果您只想将此格式应用于选定的列,请传递带有“所需”列列表的子集参数。
推荐阅读
- functional-programming - 如何在 ELM 中重构此功能?
- c++ - qt creator hello world 的 cmake 问题
- r - R:基于两行中的连续值,填充第三行
- jenkins - 如何在 MS VSTS 中使用 Jenkins 构建拉取请求?
- jquery - 定义了两个 jquery 变量后,如何通过 AJAX 发送 POST?
- gitlab - 我应该为多个项目使用单个还是多个 GitLab CI Runners?
- kubernetes - 有没有办法在 kubernetes statefulset 配置文件中获取 pod 的序数索引?
- java - Arity 与 Java Cucumber 数据表不匹配
- arrays - jq:选择 .attribute 在列表中的位置
- css - 使 css 变量流血到子组件