Python 在groupby层次结构上应用样式

Python 在groupby层次结构上应用样式,python,pandas,dataframe,pandas-styles,Python,Pandas,Dataframe,Pandas Styles,Pandas style关键字仅适用于行或列。是否可以按照子级别进行拆分 比如说 np.random.seed(24) df = pd.DataFrame({'Types': np.linspace(1, 10, 10)}) df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=['Names','V1','V2','V3'])], axis=1) df['Types'][0:7] ="D

Pandas style关键字仅适用于行或列。是否可以按照子级别进行拆分

比如说

np.random.seed(24)
df = pd.DataFrame({'Types': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=['Names','V1','V2','V3'])],
               axis=1)

df['Types'][0:7] ="Dang"

df['Types'][7:] ="Fang"

df['Names'][0:3] ="Andy"

df['Names'][3:8] ="Flower"

df['Names'][8:] ="Avril"

df2 = pd.groupby(df,['Types','Names']).mean()
df2
现在我想根据子级别突出显示最大值

def highlight_max(x):
     return ['background-color: yellow' if v == x.max() else ''
                for v in x]

df2.style.apply(highlight_max,axis=0,subset=['V1'])

在本例中,它将突出显示“V1”列中的最大值。我希望基本上两个最大值根据组水平。所以我想突出显示这些值。有什么简单的方法可以做到这一点吗?所有介绍材料都没有涵盖这一基本功能。

您需要返回设置样式的颜色数据框。因此,需要使用相同的索引和默认值的列创建新的
df
——此处为空字符串,然后根据创建的条件和比较条件更改值(
=
):

def highlight_max(x): 
   c1 = 'background-color: yellow'
   c2 = '' 
   m = x.groupby(level=0)['V1'].transform('max').eq(x['V1'])

   df1 = pd.DataFrame(c2, index=x.index, columns=x.columns)
   df1.loc[m, 'V1'] = c1
   return df1

df2.style.apply(highlight_max,axis=None)