Python 突出显示多索引数据帧上的最大/最小值-熊猫

Python 突出显示多索引数据帧上的最大/最小值-熊猫,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,假设具有两层多索引数据帧: df=pd.DataFrame(['one',A',100,3],'two',A',101,4], [3',A',102,6],“1',B',103,6], [2',B',104,0],“3',B',105,3], 列=['c1',c2',c3',c4'])。设置索引(['c1',c2'])。排序索引() 打印(df) 哪个看起来像这个 c3 c4 c1 c2 one A 100 3 B 1

假设具有两层多索引数据帧:

df=pd.DataFrame(['one',A',100,3],'two',A',101,4],
[3',A',102,6],“1',B',103,6],
[2',B',104,0],“3',B',105,3],
列=['c1',c2',c3',c4'])。设置索引(['c1',c2'])。排序索引()
打印(df)
哪个看起来像这个

           c3  c4
c1    c2         
one   A   100   3
      B   103   6
three A   102   6
      B   105   3
two   A   101   4
      B   104   0
我的目标是突出显示所有列
'c3'
'c4'
'c1'
中每个元素的
'c2'
元素之间的最小值(或相当于最大值)

             c3      c4
c1    c2         
one   A   **100**   **3**
      B     103       6
three A   **102**     6
      B     105     **3**
two   A   **101**     4
      B     104     **0**
你有什么建议吗

我已经尝试过这个方法,但它可以按列运行,并且不基于索引

def高亮显示最小值(数据):
attr='背景色:{}'。格式(颜色)
如果data.ndim==1:#系列从.apply(轴=0)或轴=1
is_max=data==data.min()
返回[attr if v else''对于v in is_max]
其他:#from.apply(轴=无)
is_max=data==data.min().min()
返回pd.DataFrame(np.where(是最大值,属性“”),
index=data.index,columns=data.columns)
df=df.style.apply(高亮显示最小值,轴=0)
结果如下所示:

             c3      c4
c1    c2         
one   A   **100**     3
      B     103       6
three A     102       6
      B     105       3
two   A     101       4
      B     104     **0**
min
一起使用,并按所有值进行比较:

def highlight_min(data):
    color= 'red'
    attr = 'background-color: {}'.format(color)

    if data.ndim == 1:  # Series from .apply(axis=0) or axis=1
        is_min = data == data.min()
        return [attr if v else '' for v in is_min]
    else: 
        is_min = data.groupby(level=0).transform('min') == data
        return pd.DataFrame(np.where(is_min, attr, ''),
                            index=data.index, columns=data.columns)

@MROB-对我来说,工作很好,你是否使用
df.style.apply(高亮显示,axis=None)