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

基于ID观测数过滤DataFrame:删除对应最小年份行

解决方法:按ID过滤并删除年份最小的行

针对你提出的需求,我整理了一个简洁的Pandas实现方案,完全贴合你的示例要求:

首先,先还原你的原始DataFrame:

import pandas as pd

# 创建原始数据
df = pd.DataFrame({
    'year': [2019, 2012, 2017, 2013, 2018, 2012, 2013],
    'id': ['x1', 'x1', 'x1', 'x1', 'x2', 'x2', 'x2']
})

接下来是核心处理代码,直接实现“ID行数超3则删除年份最小行”的逻辑:

# 按ID分组,对每组按年份降序排序后取前3行(自动过滤掉年份最小的多余行)
processed_df = df.groupby('id', group_keys=False).apply(
    lambda group: group.sort_values('year', ascending=False).head(3)
).reset_index(drop=True)

代码逻辑解释:

  • 分组:用groupby('id')把数据按ID拆分,group_keys=False避免分组键干扰最终结果的结构;
  • 排序+筛选:对每个ID组,先按year降序排列(年份大的在前),然后用head(3)取前3行——如果组内行数≤3,就保留全部;如果行数>3,就自动剔除年份最小的那些行(因为降序后它们排在末尾);
  • 重置索引:reset_index(drop=True)把结果的索引重置为连续的数字,和你给出的示例格式一致。

运行后得到的结果完全符合预期:

year  id
0  2019  x1
1  2017  x1
2  2013  x1
3  2018  x2
4  2012  x2
5  2013  x2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:59:08