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

How to conditionally format pandas row groups in jupyter

我在 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。我不确定如何为此应用这些方法,因为它们似乎要么只与单元格元素交互,要么只与一个特定行交互。

试试这个:

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)

这是@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