新年快乐,
我想有条件地格式化一个df,根据它的列使用多个标准,如下所示:
| | 企业_实体|2021年上半年|2022年上半年|2022年下半年|运动|
| - ------| - ------| - ------| - ------| - ------| - ------|
| 第二章|美国广播公司|无|无|一百|一百|
| 四个|定义|九十九|九十九|一百|1个|
| 八个|全球健康指数|九十七|九十七|九十八|1个|
| 二十个|JKl|九十八|九十八|九十八|无|
| 三个|移动网络运营商|九十八|九十七|九十八|1个|
| 二十三|工艺评定报告|无|无|九十八|九十八|
| 十九|STU|九十八|九十七|九十八|1个|
| 二十二|大众汽车|九十六|九十八|九十八|无|
| 十七|差分格式|九十七|九十九|九十八|-1人|
我尝试做的是用以下标准格式化df:
对于色谱柱2021-H1至2022-H2:如果值〉= 89(绿色),如果值〉= 79.5且〈89(橙色),如果值〈79.5(红色)
"变动"栏:如果值〉= .05(绿色),值〉-.05且〈.05(橙色),值〈=-.05(红色)
我在这里做了一些研究,并提出了下面的代码:
division_summary_table.style.apply(lambda x: ['background:green'
if (colname=='2021-H1' and value >=89)
else 'background:orange'
if (colname=='2021-H1' and value >=79.5)
else 'background:red'
if (colname=='2021-H1' and value <79.5)
else 'background:green'
if (colname=='2022-H1' and value >=89)
else 'background:orange'
if (colname=='2022-H1' and value >=79.5)
else 'background:red'
if (colname=='2022-H1' and value <79.5)
else 'background:green'
if (colname=='2022-H2' and value >=89)
else 'background:orange'
if (colname=='2022-H2' and value >=79.5)
else 'background:red'
if (colname=='2022-H2' and value <79.5)
else 'background:green'
if (colname=='Movement' and value >=.5)
else 'background:orange'
if (colname=='Movement' and value >=0)
else 'background:red'
if (colname=='Movement' and value <-.5)
else ' '
for colname, value in x.items()],axis=1).format(precision=0)
它目前运行良好,但真的很"冗长"。由于我需要生成多个这样的表并应用相同的格式,我试图编写一个简单的函数,然后在以后重用它:
def styler(df):
for colname, value in df.items():
if (colname=='2021-H1' and value >=89):
return 'background:green'
elif (colname=='2021-H1' and value >=79.5):
return 'background:orange'
elif (colname=='2021-H1' and value <79.5):
return 'background:red'
else:
return ''
division_summary_table.apply(styler)
当我应用它给我下面的错误:
"函数〈0x000002566633C940处的函数样式器〉导致apply方法折叠为Series"。通常,这是函数返回单个值的结果,而不是类似列表的结果。
我是一个初学者,真的不知道如何解决它。感谢您的意见,一个更好的方法来完成我想达到的目标。还有一件事,我需要帮助的是如何保存为PNG文件的表格与条件格式。
谢谢。
1条答案
按热度按时间sauutmhj1#
让我们定义
colorize
列子集的函数:结果