如何在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: 需要高亮的数据数量,默认值为3bg_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
相关产品推荐
相关产品推荐

