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”列中的最大值。根据组级别,我基本上想要两个最大值。所以我想强调价值观。有没有简单的方法呢?没有一个介绍材料涵盖这个基本功能。
答案 0 :(得分:0)
您需要为设置样式返回DataFrame
种颜色。因此,需要创建具有相同索引的新df
和具有默认值的列 - 此处为空字符串,然后按GroupBy.transform
创建的条件更改值,并按eq
(==
进行比较):
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)