当前位置: 首页 > 知识库问答 >
问题:

用于字符串值着色的Python条件格式

柴砚文
2023-03-14

我有一个数据框,对象列如下所示。列包含字符串值,括号中包含分数和增量分数

Manager     engage_final   engage_q1_final    engage_q2_final    engage_q3_final   
John        64% (+5)       66% (+4)           65% (+6)           64% (+5)
Peter       92% (-2)       90% (-1)           91% (-7)           93% (-4) 
Jennifer    98% (nan)      96% (nan)          97% (nan)          96% (nan)
Patricia    95% (0)        95% (-1)           96% (+1)           94% (0)  
Melissa     88% (+3)       85% (+2)           84% (0)            90% (-6)

在我将其输出到excel之前,我想根据增量分数应用一些条件格式。条件格式包括根据括号中的值应用一些颜色。深绿色表示大于5,深绿色表示5,浅绿色表示4,深橙色表示小于-5,深橙色表示-5,浅橙色表示-4等。

我试过下面的代码,它不是最优雅的,而且也不起作用。似乎找不到很多条件格式的解决方案。非常感谢任何形式的帮助,谢谢。

columns = [col for col in engage_df.columns if 'engage' in col]


def highlight (engage_df):
    if engage_df[columns].str.contains("+5"):
        return ['background-color: #64A064']
    elif engage_df[columns].str.contains("+4"):
        return ['background-color: #78B478']
    elif engage_df[columns].str.contains("+3"):
        return ['background-color: #8CC88C']
    elif engage_df[columns].str.contain("+2"):
        return ['background-color: #A0DCA0']
    elif engage_df[columns].str.contains("+1"):
        return ['background-color: #B4F0B4']
    elif engage_df[columns].str.contains("+"):
        return ['background-color: #508C50']
    elif engage_df[columns].str.contains("-5"):
        return ['background-color: #F48200']
    elif engage_df[columns].str.contains("-4"):
        return ['background-color: #FF9600']
    elif engage_df[columns].str.contains("-3"):
        return ['background-color: #FFAA00']
    elif engage_df[columns].str.contains("-2"):
        return ['background-color: #FFBE00']
    elif engage_df[columns].str.contains("-1"):
        return ['background-color: #FFD200']
    elif engage_df[columns].str.contains("-"):
        return ['background-color: #FF6E00']
    else:
        return ['background-color: white']

engage_df.style.apply(highlight, axis=1)

共有1个答案

翟沈义
2023-03-14

创建字典,将值映射到样式器。仅对子集参数中的列应用

def highlight(x):
    #get +-INT values between ()
    s1 = x.str.extract('\(([+-]*\d+)\)', expand=False)
    #Series with default values
    s = pd.Series('background-color: white', index=x.index)
    #dictionary for match
    d = {'+5':'background-color: #64A064', '+4': 'background-color: #78B478'}
    #if match colot between () add value from dictionary
    for k, v in d.items():
        s.loc[s1 == k] = v
         
    #replace >5 and <-5 values comparing floats values
    s.loc[s1.astype(float) > 5] = 'background-color: #508C50'  
    s.loc[s1.astype(float) < -5] = 'background-color: #FF6E00'  
    return s


cols = [col for col in engage_df.columns if 'engage' in col]
engage_df.style.apply(highlight, subset=cols, axis=1).to_excel('file.xlsx')
 类似资料:
  • 问题内容: 我一直在使用Python开发基于文本的游戏,并且遇到了一个实例,在该实例中我想根据一组条件以不同的方式设置字符串格式。 具体来说,我想显示描述房间中物品的文字。我希望在且仅当有问题的项目对象在房间对象的项目列表中时,才在房间的描述中显示此内容。设置方式方面,我觉得仅根据条件连接字符串不会如我所愿地输出,最好为每种情况使用不同的字符串。 我的问题是,是否有任何基于布尔条件的结果格式化字符

  • 主要内容:指定最小输出宽度,指定对齐方式,指定小数精度我们在《 第一个Python程序——在屏幕上输出文本》中讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出,这就是本节要讲解的内容。 熟悉C语言 printf() 函数的读者能够轻而易举学会 Python print() 函数,它们是非常类似的。 print() 函数使用以 开头的转换说明符对各种类型的数据进行格式化输出,具体请看下表。

  • 我遇到了一个奇怪的错误,我正在努力理解。做一些常规代码清理并将所有字符串格式转换为f字符串。这是在Python 3.6.6上 此代码不起作用: 但是,这(功能相同)确实有效: 我觉得我可能错过了一些明显的东西,并且对第二次迭代很好,但是我想了解这里发生了什么。

  • 问题内容: 我正在开发一个应用程序,在其中执行一些请求以获取对象ID。在它们每个之后,我调用一个方法()将此id作为参数传递(请参见下面的代码)。 可以注意到,我正在将其转换为前缀并将其与前缀连接。但是,我知道我能做到这一点的多种其他方式(或者,例如),并在我的问题的结果:将超过字符串连接更好的可读性,代码约定和效率方面? 谢谢 问题答案: 这很容易成为基于意见的主题,但是我发现格式在大多数情况下

  • 我试图在插值字符串中使用条件操作符,但是因为它有一个冒号,编译器认为冒号后面是一个格式字符串。 我如何使用这种类型的语句?我唯一想到的事情是这样的:

  • 问题内容: 有没有一种方法可以使用新的格式语法来格式化函数调用中的字符串?例如: 因此它在字符串 内部* 调用函数函数,而不是在格式化函数中作为参数。 * 编辑:这是另一个示例,可能会更好地显示我的挫败感,这就是我想要的: 这是我要避免的事情: 问题答案: Python 3.6添加了文字字符串插值,并以前缀编写。请参阅PEP 0498-文字字符串插值 。 这允许一个人写 应当注意,这些不是实际的字