使用 pandas.style.apply 时应用多个 CSS 样式选项

Applying multiple CSS styling options when using pandas.style.apply

我正在为一个复杂的图形构建自己的图例,其中一些线条具有十六进制颜色(例如 #009933)。为了构建图例,我有一个 'color' 列,它与图中的线条具有相同的十六进制颜色。我使用 pandas 应用函数将颜色应用到颜色单元格的背景,如下所示。

import pandas as pd

def legend_styling(val):
    if val.name == 'color':
        return ['background-color: %s'%x for x in val]
    elif val.name == 'shift':
        return ['font-weight: bold' for x in val]

df = pd.DataFrame({
    'form': {1: 'C4H6O5', 2: 'C4H6O5', 3: 'C4H4O4', 4: 'C4H5N3O'}, 
    'name': {1: 'Malate', 2: '3-Dehydro-L-threonate', 3: 'Fumarate', 4: 'Cytosine'}, 
    'color': {1: '#009933', 2: '#009933', 3: '#e67300', 4: '#e63900'},
    'shift': {1: 'm+0', 2: 'm+0', 3: 'm+0', 4: 'm+0'}
})
df.style.apply(legend_styling, axis=0,subset=['color','shift'])

我想将 'color' 列中的文本(黑色十六进制代码)着色为与背景相同的颜色,以便它们融合在一起。我不知何故需要将以下两个 CSS 样式选项应用于单元格 'background-color: #xxxxxx''color: #xxxxxx'。有办法吗?

不确定您是否能够解决此问题,但我想我会将我的解决方案分享给可能偶然看到此页面的任何人。我喜欢在应用样式时采用更具可读性的方法:

def style_conditions(x):
    bg_color_na = '#d9d9d9'
    bg_color_1 = '#ff0000'
    bg_color_2 = '#ffc000'
    bg_color_3 = '#ffff00'
    bg_color_4 = '#00b0f0'
    color_1 = '#ffffff'
    
    
    if x == 'Not Inspected':
        return  f'background-color: {bg_color_na}'
    elif x == '1-Urgent Repair':
        return  f'background-color: {bg_color_1}; color: {color_1}'
    elif x == '2-Repair Within a Week':
        return  f'background-color: {bg_color_2}'
    elif x == '3-Repair Next Opportunity':
        return  f'background-color: {bg_color_3}'
    elif x == '4-Scheduled Repair':
        return  f'background-color: {bg_color_4}'
    else:
        return ''

df.style.applymap(style_conditions)

这里注意 x == '1-Urgent Repair' 有两种样式:

  1. 一个用于'background-color' 遮蔽单元格
  2. 一个用于 'color' 将文本颜色更改为白色。

因此,为了更直接地回答您的问题,应用多个样式只需 semi-colon 分开即可。