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

在R中按ID筛选数据框前两条记录的实现方法

按ID筛选每个ID对应的前两条记录(Pandas方案)

针对你这种包含重复ID和多日期的DataFrame,最实用的解决思路是结合**分组(groupby)和取前N行(head)**操作,不过要先确保数据按日期有序,这样取到的前两条才是时间最早的记录。

步骤1:转换日期列格式(关键前提)

首先得把Date列转换成pandas能识别的datetime类型,否则排序逻辑会出错:

import pandas as pd

# 假设你的DataFrame变量名为df
df['Date'] = pd.to_datetime(df['Date'])

步骤2:分组取前两条记录

如果你的数据已经是按日期升序排列的,直接执行以下代码即可:

# 按ID分组,每个组取前2行
result_df = df.groupby('ID').head(2)

如果数据原本的顺序不是按日期排序的,建议先按ID和Date排序,再分组取数,确保拿到的是每个ID下最早的两条记录:

# 先按ID、Date升序排序,再分组取前2行
result_df = df.sort_values(['ID', 'Date']).groupby('ID').head(2)

示例结果验证

用你提供的测试数据运行后,输出结果会是:

IDDate
A2018-01-01 18:34:00
A2018-01-01 18:35:00
B2018-01-01 18:34:00
B2018-01-01 18:35:00
C2018-01-01 18:34:00
C2018-01-01 18:35:00

补充:去重后取前两个不同日期

如果你的需求是保留每个ID下前两个不同的日期(比如ID A的两条18:35记录只留一条),可以先去重再分组:

# 先按ID和Date去重,再分组取前2行
result_df = df.drop_duplicates(['ID', 'Date']).groupby('ID').head(2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:34:28