如何使用列表列表设置 pandas 数据框的样式?

How to style pandas dataframe using a list of lists?

我有一个 pandas 数据框,例如:

我需要使用像这样的列表来设置样式:

[[3, 7, 4, 5],
[6, 17, 5, 10, 13, 16],
[7, 22, 6, 17, 19, 12],
[12, 26, 24, 25, 23, 18, 20],
[21, 20, 18, 27, 25]]

如果 R1 值在第一个列表中为蓝色,如果 R2 值在第二个列表中为蓝色,依此类推。 换句话说,如果值在相应列表中,则每列的颜色编号。

我试过:

def posclass(val):

    color = 'black'

    for i in range(5):
    
        if (val in list[i]):

            color = 'blue'

    return 'color: %s' % color

df.style.applymap(posclass,  subset=['R1','R2','R3','R4','R5'])

但是将每个列表应用于每一列时无法正常工作。

期望的结果是一个带有彩色数字的数据框(那些在每个列表的每一列中匹配的数字)。

尝试这样的事情:

df = pd.DataFrame(np.arange(40).reshape(-1,4), columns=[f'R{i}' for i in range(1,5)])

输入 df:

   R1  R2  R3  R4
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
4  16  17  18  19
5  20  21  22  23
6  24  25  26  27
7  28  29  30  31
8  32  33  34  35
9  36  37  38  39

list_l = [[3, 7, 4, 5],
[6, 17, 5, 10, 13, 16],
[7, 22, 6, 17, 19, 12],
[12, 26, 24, 25, 23, 18, 20],
[21, 20, 18, 27, 25]]

然后:

def f(x):
    colpos = df.columns.get_loc(x.name)
    return ['color: blue' if n in list_l[colpos] else '' for n in x]
df.style.apply(f)

输出: