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

如何在Pandas DataFrame列中高亮显示前3个最大值/最小值?

Pandas DataFrame指定列高亮前N个最大值/最小值实现方案

核心实现思路

通过Pandas的Styler对象定义自定义样式函数,筛选出指定列的目标数据(前N个最大值/最小值),再为其设置自定义背景色与文字颜色即可。

代码实现

高亮「Values A」列前3个最大值

针对你给出的示例数据,完整实现代码如下:

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({"Values A":[1,2,3,4,5], "Values B":[5,4,3,2,1]})

def highlight_top_n(s, n=3, bg_color='#FFFF00', text_color='#000000'):
    # 仅对目标列「Values A」应用样式
    if s.name != 'Values A':
        return ['']*len(s)
    # 获取前n个最大值的索引位置
    top_n_index = s.nlargest(n).index
    # 生成样式列表,匹配索引的行应用自定义样式
    return [f'background-color: {bg_color}; color: {text_color}' if i in top_n_index else '' for i in s.index]

# 应用样式并展示结果
styled_df = df.style.apply(highlight_top_n, axis=0)
styled_df

参数自定义说明

  • n: 需要高亮的数据数量,默认值为3
  • bg_color: 高亮背景色,默认黄色(#FFFF00),可替换为任意十六进制颜色值或颜色名称(如'lightblue')
  • text_color: 高亮文字颜色,默认黑色(#000000),可根据需求调整

高亮最小值的适配调整

如果需要高亮前3个最小值,只需将函数中的nlargest(n)替换为nsmallest(n)即可,示例如下:

def highlight_bottom_n(s, n=3, bg_color='#ADD8E6', text_color='#000000'):
    if s.name != 'Values A':
        return ['']*len(s)
    bottom_n_index = s.nsmallest(n).index
    return [f'background-color: {bg_color}; color: {text_color}' if i in bottom_n_index else '' for i in s.index]

关键知识点说明

  • Styler.apply(): 用于将自定义样式函数应用到DataFrame的列(axis=0)或行(axis=1)
  • Series.nlargest()/Series.nsmallest(): 高效获取Series中前N个最大/最小值的索引,性能优于先排序再取前N项的方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:45:32