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

如何从按年份划分的DataFrame中提取每年的前2-3个最高值

按年份筛选DataFrame中前N个最高值的行

假设你的DataFrame包含年份列(比如year)和需要排序的数值列(比如value),下面提供两种常见场景的实现方式:

场景1:严格取每年前N行(按数值降序,仅保留前N条记录)

如果只需要每年排序后的前N行(即使存在数值并列,也只取前N条),可以用groupby结合nlargest快速实现:

import pandas as pd

# 示例DataFrame
data = {
    'year': [2020, 2020, 2020, 2021, 2021, 2021, 2021],
    'value': [10, 20, 20, 30, 40, 40, 50]
}
df = pd.DataFrame(data)

# 设置要保留的每年最高值数量
top_n = 2

# 分组筛选
result = df.groupby('year', group_keys=False).apply(lambda x: x.nlargest(top_n, 'value'))

场景2:保留所有属于前N个最高值的行(含并列)

如果需要保留所有数值属于每年前N个最高值的记录(比如某年份有多个行数值并列第二,全部保留),可以用排名方法实现:

# 设置要保留的最高值个数
top_n = 2

# 按年份分组计算稠密排名(相同数值排名相同)
df['rank'] = df.groupby('year')['value'].rank(method='dense', ascending=False)

# 筛选排名<=top_n的行,最后删除临时排名列
result = df[df['rank'] <= top_n].drop(columns='rank')

两种方法的区别:

  • 场景1会严格限制每年的行数为N,适合只需要固定条数的需求;
  • 场景2会保留所有符合前N个最高值的行,适合需要包含并列数据的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:13