如何仅对 Pandas 数据框列的部分进行着色?
How to color parts only of a Pandas dataframe columns?
我有一个 Pandas 数据帧,其中包含连续的 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,我不希望彩色打印控制台。
谢谢
这是一种方法。
替换:
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 输出:
我有一个 Pandas 数据帧,其中包含连续的 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,我不希望彩色打印控制台。 谢谢
这是一种方法。
替换:
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 输出: