如何仅为Pandas数据框列的部分着色?

sirbozc5  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(97)

我有一个Pandas DataFrame,其中包含连续的1和0序列,如下所示:

import numpy as np
import pandas as pd

m = np.array([[1, 1, 1, 1], [1, 1, 1, 0], [1, 0, 1, 0], [1, 0, 0, 0]])
df = pd.DataFrame(m, columns=["C1", "C2", "C3", "C4"])
df.insert(0, "Sy", ["r1", "r2", "r3", "r4"])

这给了我以下的df:

Sy  C1  C2  C3  C4
0  r1   1   1   1   1
1  r2   1   1   1   0
2  r3   1   0   1   0
3  r4   1   0   0   0

我尝试用不同的列特定的颜色来为每列中的一系列颜色。该系列从row=0开始,一直持续到第一个零出现。我使用this Stack Overflow post来为列着色。
但是,此代码会对整个列进行着色,而不仅仅是包含连续1序列的单元格:

def f(dat, c="red"):
    return [f"background-color: {c}" for i in dat]

columns_with_color_dictionary = {
    "C1": "red",
    "C2": "blue",
    "C3": "orange",
    "C4": "yellow",
}

style = df.style
for column, color in columns_with_color_dictionary.items():
    style = style.apply(f, axis=0, subset=column, c=color)

with open("dd.html", "w") as fh:
    fh.write(style.render())

Html输出:

有人能在这件事上帮助我吗?任何替代的想法也是受欢迎的。实际的矩阵大约是200X200,我不希望彩色打印到控制台。谢谢

x759pob2

x759pob21#

这里有一个方法。
替换:

style = df.style
for column, color in columns_with_color_dictionary.items():
    style = style.apply(f, axis=0, subset=column, c=color)

使用:

style = df.style
for column, color in columns_with_color_dictionary.items():
    style = style.apply(f, axis=0, subset=column, c=color).applymap(
        lambda x: f"background-color: white",
        subset=(
            df[df[column] != 1].index,
            [column],
        ),
    )

下面是Html输出:

相关问题