Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据另一个数据帧mith multi index设置元素样式_Python_Pandas_Multi Index - Fatal编程技术网

Python 根据另一个数据帧mith multi index设置元素样式

Python 根据另一个数据帧mith multi index设置元素样式,python,pandas,multi-index,Python,Pandas,Multi Index,我以前问过这个问题,我有一个可行的解决方案,但现在我试图将它应用到一个具有多索引的数据帧,我得到了一个错误,我不理解 问题 我有一个函数和伴随的布尔矩阵。我想根据布尔矩阵突出显示df 资料 我尝试的解决方案 结果 上面抛出一个AttributeError:“Series”对象没有属性“applymap” 我不明白什么会以连续剧的形式出现。这是我正在设置的单个值,该解决方案适用于非多索引df,如下所示 无多索引 文档 参考CSS类,并说“索引标签单元格包括level,其中k是多索引中的level。

我以前问过这个问题,我有一个可行的解决方案,但现在我试图将它应用到一个具有多索引的数据帧,我得到了一个错误,我不理解

问题 我有一个函数和伴随的布尔矩阵。我想根据布尔矩阵突出显示df

资料 我尝试的解决方案 结果 上面抛出一个
AttributeError:“Series”对象没有属性“applymap”

我不明白什么会以连续剧的形式出现。这是我正在设置的单个值,该解决方案适用于非多索引df,如下所示

无多索引 文档
参考CSS类,并说“索引标签单元格包括level,其中k是多索引中的level。”我显然对此进行了错误的索引,但我在如何继续上遇到了难题。

很高兴有一个可运行的示例

您可以使用
df.style.apply(…,axis=None)
将高亮显示方法应用于整个数据帧

使用
df
bool_矩阵
,尝试以下操作:

def highlight(value):
    d = value.copy()
    for c in d.columns:
        for r in df.index:
            if bool_matrix.loc[r, c]:
                d.loc[r, c] = 'background-color: green'
            else:
                d.loc[r, c] = ''
    return d

df.style.apply(highlight, axis=None)
或者,为了简化代码,您可以尝试:

def highlight(value):
    return bool_matrix.applymap(lambda x: 'background-color: green' if x else '')

df.style.apply(highlight, axis=None)

希望这就是您所需要的。

第二种解决方案非常好,使一切都变得更加简单,并且可以扩展到我必须完成的所有其他亮点。
import pandas as pd
import numpy as np
from datetime import datetime
np.random.seed(24)
date = pd.date_range(start = datetime(2016,1,1), end = datetime(2016,2,1), freq = "D")
df = pd.DataFrame({'A': np.linspace(1, 100, len(date))})
df = pd.concat([df, pd.DataFrame(np.random.randn(len(date), 4), columns=list('BCDE'))],
               axis=1)

df['date'] = date
df.set_index("date", inplace = True)

boo =  [True, False]
bool_matrix = pd.DataFrame(np.random.choice(boo, (len(date), 5),p=[0.3,.7]), index = date,columns=list('ABCDE'))

def highlight(value):
    return 'background-color: green' 
my_style = df.style
for column in df.columns:
    for i in bool_matrix.index:
        data = bool_matrix.loc[i, column]
        if data: 
            my_style = df.style.use(my_style.export()).applymap(highlight, subset = pd.IndexSlice[i,column])
my_style
def highlight(value):
    d = value.copy()
    for c in d.columns:
        for r in df.index:
            if bool_matrix.loc[r, c]:
                d.loc[r, c] = 'background-color: green'
            else:
                d.loc[r, c] = ''
    return d

df.style.apply(highlight, axis=None)
def highlight(value):
    return bool_matrix.applymap(lambda x: 'background-color: green' if x else '')

df.style.apply(highlight, axis=None)