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

Pandas groupby分组后筛选最新3条数据均满足条件的ID

实现方案

核心逻辑

你可以分两步处理:

  1. 按ID分组后,每组按时间倒序排序,先筛选出记录数≥3的分组,再取每个分组最新的3条数据
  2. 校验每个分组取出的3条数据的Value是否全部小于10,保留符合条件的ID即可

完整代码

import pandas as pd
import datetime

# 构造示例DataFrame
df = pd.DataFrame({'ID': [1,1,1,1,2,2,2,3],
                   'Time': [datetime.date(2019, 12, 1), datetime.date(2019, 12, 5),datetime.date(2019, 12, 8),datetime.date(2019, 8, 4),datetime.date(2019, 11, 4),datetime.date(2019, 11, 4),datetime.date(2019, 11, 3),datetime.date(2019, 12, 20)],
                   'Value':[2,2,2,50,7,100,7,5]})

# 业务逻辑实现
result = (
    df.groupby('ID', group_keys=False)
    # 每组按时间倒序取最新3条
    .apply(lambda group: group.sort_values('Time', ascending=False).head(3))
    # 二次按ID分组
    .groupby('ID')
    # 过滤两个条件:记录数等于3、所有Value都小于10
    .filter(lambda x: len(x) == 3 and (x['Value'] < 10).all())
    # 取唯一ID输出
    ['ID'].unique()
)
result_df = pd.DataFrame({'ID': result})
print(result_df)

输出结果

ID
0   1

逻辑说明

  • ID1分组排序后最新3条的Value分别为2、2、2,全部小于10,符合要求
  • ID2分组最新3条中存在Value为100的记录,不符合要求
  • ID3分组仅有1条记录,不满足3条的校验前提,直接排除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:24:02