python - Pandas 数据框样式:基于格式列突出显示一些单元格
问题描述
问题描述
我有一个 DataFrame,其中最后一列是格式列。此列的目的是包含 DataFrame 行的格式。这是此类数据框的示例:
df = pd.DataFrame({'ID': [1, 24, 31, 37],
'Status': ['to analyze', 'to analyze','to analyze','analyzed'],
'priority' : ['P1','P1','P2','P1'],
'format' : ['n;y;n','n;n;n','n;y;y','y;n;y']}
每个 df['format'] 行都包含一个字符串,该字符串旨在作为列表(拆分时)以给出行的格式。
符号含义:
- n 表示“没有突出显示”
- y 表示“以黄色突出显示”
df['format'].to_list()[0] = 'n;y;n' 表示例如:
- n:第一列 ID 项“1”未突出显示
- y:要突出显示的第二列状态项“分析”
- n:第三列优先项“P1”未突出显示
所以预期的结果是:
我试过的
我尝试使用 df.format 来获取包含所需格式的列表列表。这是我的代码:
import pandas as pd
import numpy as np
def highlight_case(df):
list_of_format_lists = []
for format_line in df['format']:
format_line_list = format_line.split(';')
format_list = []
for form in format_line_list:
if 'y' in form:
format_list.append('background-color: yellow')
else:
format_list.append('')
list_of_format_lists.append(format_list)
list_of_format_lists = list(map(list, zip(*list_of_format_lists)))#transpose
print(list_of_format_lists)
return list_of_format_lists
highlight_style = highlight_case(df)
df.style.apply(highlight_style)
它不起作用,我得到这个输出:
TypeError Traceback (most recent call last)
c:\python38\lib\site-packages\IPython\core\formatters.py in __call__(self, obj)
343 method = get_real_method(obj, self.print_method)
344 if method is not None:
--> 345 return method()
346 return None
347 else:
c:\python38\lib\site-packages\pandas\io\formats\style.py in _repr_html_(self)
191 Hooks into Jupyter notebook rich display system.
192 """
--> 193 return self.render()
194
195 @doc(NDFrame.to_excel, klass="Styler")
c:\python38\lib\site-packages\pandas\io\formats\style.py in render(self, **kwargs)
538 * table_attributes
539 """
--> 540 self._compute()
541 # TODO: namespace all the pandas keys
542 d = self._translate()
c:\python38\lib\site-packages\pandas\io\formats\style.py in _compute(self)
623 r = self
624 for func, args, kwargs in self._todo:
--> 625 r = func(self)(*args, **kwargs)
626 return r
627
c:\python38\lib\site-packages\pandas\io\formats\style.py in _apply(self, func, axis, subset, **kwargs)
637 data = self.data.loc[subset]
638 if axis is not None:
--> 639 result = data.apply(func, axis=axis, result_type="expand", **kwargs)
640 result.columns = data.columns
641 else:
c:\python38\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, raw, result_type, args, **kwds)
7543 kwds=kwds,
7544 )
-> 7545 return op.get_result()
7546
7547 def applymap(self, func) -> "DataFrame":
c:\python38\lib\site-packages\pandas\core\apply.py in get_result(self)
142 # dispatch to agg
143 if is_list_like(self.f) or is_dict_like(self.f):
--> 144 return self.obj.aggregate(self.f, axis=self.axis, *self.args, **self.kwds)
145
146 # all empty
c:\python38\lib\site-packages\pandas\core\frame.py in aggregate(self, func, axis, *args, **kwargs)
7353 axis = self._get_axis_number(axis)
7354
-> 7355 relabeling, func, columns, order = reconstruct_func(func, **kwargs)
7356
7357 result = None
c:\python38\lib\site-packages\pandas\core\aggregation.py in reconstruct_func(func, **kwargs)
74
75 if not relabeling:
---> 76 if isinstance(func, list) and len(func) > len(set(func)):
77
78 # GH 28426 will raise error if duplicated function names are used and
TypeError: unhashable type: 'list'
解决方案
推荐阅读
- javascript - formData 为空(通过 XMLHttpRequest 上传时 - 纯 JavaScript)
- javascript - 将自定义域与 Firebase 动态链接结合使用
- sql-server - SQL Server 2008:文件的数据库恢复问题
- sql - 通过 SQL 查询获取随机 N 行,这将与不同部分的总行数成正比
- php - How to convert a mysql json field to a javascript Object with laravel?
- python - 使用opencv在鼻子和眼睛轴上旋转图像
- ruby - 继承前或后挂钩到子类
- json - Haskell 构建简单的 JSON 解析器
- oracle - 在 Oracle 中删除模式上的所有对象
- jquery - 试图以编程方式在溢出 div 中滚动,但 $('el').scrollLeft() 总是返回零