You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas样式关键字仅支持行列,能否按分组子层级拆分并高亮最大值?

Pandas按分组子层级高亮最大值的实现方案

当然可以!针对你按Types和Names分组后的DataFrame,我们完全可以实现按分组子层级拆分处理,精准高亮每个子分组里的最大值。下面一步步来完成这个需求:

第一步:修正并确认分组数据

首先注意你原代码里的分组写法有个小问题,pd.groupby(df,['Types','Names']).mean()应该改为df.groupby(['Types','Names']).mean(),不然会抛出语法错误。先完整运行正确的数据准备代码:

import numpy as np
import pandas as pd

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 = df.groupby(['Types','Names']).mean()
df2

运行后得到的df2是一个多级索引的DataFrame,每个层级是Types和Names的组合,我们要针对每个这样的子分组处理最大值高亮。

第二步:自定义分组高亮函数

我们需要写一个自定义函数,接收每个子分组的DataFrame,返回对应的样式规则。这里我们把每个子分组中数值列(V1、V2、V3)的最大值单元格标记为黄色背景:

def highlight_group_max(sub_df):
    # 找到当前子分组中V1-V3列的最大值
    max_val = sub_df[['V1','V2','V3']].max().max()
    # 创建样式矩阵,等于最大值的单元格应用黄色背景,其余为空
    style = sub_df.applymap(lambda x: 'background-color: yellow' if x == max_val else '')
    return style

第三步:应用样式到分组数据

利用Styler.apply方法,通过groupby参数指定我们的多级分组索引,这样函数会自动遍历每个子分组并应用样式:

styled_df = df2.style.apply(highlight_group_max, axis=None, subset=['V1','V2','V3'], groupby=['Types','Names'])
styled_df

代码说明

  • axis=None:表示我们要处理整个DataFrame(而非按行或列)
  • subset=['V1','V2','V3']:限定只处理数值列,避免影响其他列(这里其实只有数值列,不过显式指定更严谨)
  • groupby=['Types','Names']:告诉Styler按这两个层级的分组来逐个处理子数据

运行后,每个(Types, Names)子分组里的最大值单元格都会被黄色背景高亮,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Animesh Saxena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:49:12