如何在jupy中有条件地格式化pandas行组

2024-05-19 12:35:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pandas中有一个数据帧,看起来有点像:

A     B     C
1     0.5   0.6
1     0.7   0.1
2     0.3   0.2
3     0.1   0.3
3     0.2   0.1

在jupyter中打印pandas数据帧时,默认的输出样式是使用交替的浅色和灰色背景为每行着色。我希望能够调整每一组A列值的背景色,使每组具有交替的配色方案。因此与默认样式类似,除了不是每行背景交替显示灰色和白色之外,它将按列A中的一组值交替显示

我在这里找到了一些文档:https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html。我不确定如何将这些方法应用到这个目的,因为它们看起来要么只与一个单元格元素交互,要么只与一个特定的行交互。在


Tags: 数据文档httpspandas方案jupyter样式背景
2条回答

这是@billy bonaros的解决方案的一个通用版本,它对column中的值组进行交替灰色处理。最好确保行也按column值排序:

def format_color_groups(df, column):
    colors = ['#e8e8e8', '#d6d6cb']
    x = df.copy()
    factors = list(x[column].unique())
    i = 0
    for factor in factors:
        style = f'background-color: {colors[i]}'
        x.loc[x[column] == factor, :] = style
        i = not i
    return x

试试这个:

def change_color_group(x):
    df = x.copy()
    df.loc[df['A'] == 1, :] = 'background-color: yellow'
    df.loc[df['A']==2,:] = 'background-color: red'
    df.loc[df['A']==3, :] ='background-color: blue'
    return df  


df.style.apply(change_color_group, axis=None)

enter image description here

相关问题 更多 >