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

如何筛选pandas DataFrame中同ID且创建时间间隔1分钟内的行

解决方案:筛选同一ID下时间间隔1分钟内的记录

步骤1:准备数据与类型转换

首先确保creation_date列是datetime类型(原始数据如果是字符串必须转换),先构造示例数据测试:

import pandas as pd

# 构造你的示例数据
data = {
    'id': ['MP5694319-001', 'MP5694319-001', 'MP5694331-001', 'MP5694319-001'],
    'creation_date': ['2024-05-29 12:58:00.489', '2024-05-29 12:58:03.489', '2024-05-29 12:58:05.489', '2024-05-29 13:03:03.489']
}
df = pd.DataFrame(data)

# 将字符串时间转为datetime类型
df['creation_date'] = pd.to_datetime(df['creation_date'])

步骤2:分组排序并计算时间差

按id分组后,先对每组内的时间排序(保证时间顺序正确,否则时间差计算会出错),再计算每条记录与前后记录的时间间隔:

# 按id和时间排序,重置索引
df_sorted = df.sort_values(['id', 'creation_date']).reset_index(drop=True)

# 计算当前记录与上一条同id记录的时间差
df_sorted['prev_diff'] = df_sorted.groupby('id')['creation_date'].diff()
# 计算当前记录与下一条同id记录的时间差(取绝对值)
df_sorted['next_diff'] = df_sorted.groupby('id')['creation_date'].diff(periods=-1).abs()

步骤3:筛选符合条件的记录

只要某条记录与前一条或后一条的时间间隔≤1分钟,就保留这条记录:

# 生成筛选掩码:前后任一间隔≤1分钟
mask = (df_sorted['prev_diff'] <= pd.Timedelta(minutes=1)) | (df_sorted['next_diff'] <= pd.Timedelta(minutes=1))
# 筛选结果并移除辅助列
result = df_sorted[mask].drop(columns=['prev_diff', 'next_diff'])

print(result)

运行后输出结果与预期一致:

id           creation_date
0  MP5694319-001 2024-05-29 12:58:00.489
1  MP5694319-001 2024-05-29 12:58:03.489

补充说明

  • 如果原始数据已经按id和creation_date排序,可以跳过sort_values步骤,但建议保留以避免潜在的顺序问题。
  • 这种方法会保留所有属于「1分钟间隔组」的记录,比如某id有3条记录两两间隔都在1分钟内,这3条都会被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:47:32