pandas 如何根据另一个DataFrame中的条件将style.applymap应用于DataFrame

mwg9r5ms  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(129)

我有两个大小相同的 Dataframe (3乘3),一个是逻辑(真/假),另一个是数字:

我的脚本允许用户从逻辑矩阵中输入一个特定的坐标,以便将其从False更改为True(如果它已经是True,则忽略该命令)。之后,我想应用style.applymap函数为数值df中对应于True值的元素着色。

style.applymap(func, subset=((row), [columns])

因此,我的方法是保存True值的索引,并使用数字df将它们添加到子集中。但是,我不能在子集字段上添加特定的索引,也不能在子集参数中添加多行。到目前为止,我的代码是这样的:

Occupato = pd.DataFrame(np.zeros(shape = (3, 3)))
for i in range(3):
    Occupato = Occupato.astype({i: bool})

normale = pd.DataFrame(np.random.randint(0,10,size=(3, 3)), columns=list('ABC')) 

def colore(v, colore):
    # if v:
        return f"background-color: {colore};" 

idx = ('Insert coordinates as [x, y]: ')
Occupato.iloc[idx[0], idx[1]]
normale.style.applymap(colore, colore='blue', subset = (row), [columns])

现在,我发现看到子集的语法很奇怪,行使用括号()-只接受一个整数-而列使用方括号[]并允许多个值。先谢谢你了。
我试过:

mydf.style.applymap(colore, colore='blue', subset = (rows), [columns])

我期望获得在子集上指定的列表元素并将其着色为蓝色。相反,我得到了:

KeyError: "None of [Index([(1, 2)], dtype='object')] are in the [index]"
smtd7mpg

smtd7mpg1#

我会这样做:

def colore(_, o, colore): #the white color is optional
    d_map = {True: f"background-color: {colore};color: white", False: ""}
    return o.replace(d_map)

normale.style.apply(colore, o=occupato, colore="blue", axis=None)

输出:

  • 使用的输入:*
print(occupato)

       A      B      C
0  False   True   True
1   True  False  False
2   True  False   True

print(normale)

    A  B  C
0   1  5  3
1   7  6  5
2  11  3  4

相关问题