是否有一个python函数来设置多索引级别的颜色/样式?

2024-04-25 19:57:49 发布

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

我已经定义了一个函数,用于为具有CountPercentage %的每个列获取value_counts,如下所示:

import pandas as pd
import seaborn as sns
import numpy as np

from IPython.display import display


df = sns.load_dataset("diamonds")

def valueCountDF(df):
    
    object_cols = list(df.select_dtypes(exclude=np.number).columns)
    numeric_cols = list(df.select_dtypes(include=np.number).columns)

    c = df[object_cols].apply(lambda x: x.value_counts(dropna=False)).T.stack().astype(int)

    p = (df[object_cols].apply(lambda x: x.value_counts(normalize=True,
                                                       dropna=False)).T.stack() * 100).round(2)

    cp = pd.concat([c,p], axis=1, keys=["Count", "Percentage %"])
    display(cp)

valueCountDF(df)

此代码输出:

                   Count  Percentage %
cut     Fair        1610          2.98
        Good        4906          9.10
        Ideal      21551         39.95
        Premium    13791         25.57
        Very Good  12082         22.40
color   D           6775         12.56
        E           9797         18.16
        F           9542         17.69
        G          11292         20.93
        H           8304         15.39
        I           5422         10.05
        J           2808          5.21
clarity I1           741          1.37
        IF          1790          3.32
        SI1        13065         24.22
        SI2         9194         17.04
        VS1         8171         15.15
        VS2        12258         22.73
        VVS1        3655          6.78
        VVS2        5066          9.39

白色背景的{}中的大型数据集很难理解上述数据

因此,我想尝试使用pandas dataframe styler为每个行索引使用背景色来设置数据帧的样式

# Uses the full color range
display(cp.style.background_gradient(cmap='viridis'))

enter image description here

上面给出了df排除指数的背景梯度。我需要为每行索引(cut, color, clarity)及其组着色

确切地说,我想用颜色区分像一种颜色中的剪切和剪切组,一种颜色中的颜色组。有办法做到这一点吗

更新:

感谢@r-beginners

使用下面的css样式器

table_css = [
    {
        "selector":"th.row_heading.level0",
        "props":[
            ("background-color", "darkseagreen"),
            ("color", "white")
        ]
    }
]
def valueCountDF(df):
    
    object_cols = list(df.select_dtypes(exclude=np.number).columns)
    numeric_cols = list(df.select_dtypes(include=np.number).columns)

    c = df[object_cols].apply(lambda x: x.value_counts(dropna=False)).T.stack().astype(int)

    p = (df[object_cols].apply(lambda x: x.value_counts(normalize=True,
                                                   dropna=False)).T.stack() * 100).round(2)

    cp = pd.concat([c,p], axis=1, keys=["Count", "Percentage %"])
    #cp.index.names = ['C3','grade']
    #print(cp.style.render())
    style = cp.style.background_gradient(cmap='viridis')
    style = style.set_table_styles(table_css)
    return style

valueCountDF(df)

能够仅使用一种颜色为level0索引着色,如下所示

enter image description here


Tags: importdfobjectvaluestyle颜色countdisplay