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

如何按id截取时间序列DataFrame的前15分钟数据?

按ID截取时间序列DataFrame的前15分钟数据

步骤1:转换时间列类型

首先要把字符串格式的timestamp列转为datetime类型,才能进行时间差计算:

import pandas as pd

df = pd.DataFrame(
     {'id': [15,15,15,15,15,64,64,64,64,64],
 'timestamp': ['2016-04-01 00:05:00','2016-04-01 00:10:20','2016-04-01 00:13:01',
                '2016-04-01 00:14:00','2016-04-01 00:16:00','2016-04-01 21:04:59',
               '2016-04-01 21:13:05','2016-04-01 21:20:00','2016-04-01 21:25:25',
  '2016-04-01 21:59:59']}
)

# 转换为datetime类型
df['timestamp'] = pd.to_datetime(df['timestamp'])

步骤2:筛选每个ID的前15分钟数据

推荐两种实现方式:

方式一:使用transform(高效,适合大数据集)

通过transform计算每个ID的最早时间,直接筛选时间差≤15分钟的记录:

# 计算每个ID的起始时间
df['start_time'] = df.groupby('id')['timestamp'].transform('min')
# 筛选起始时间后15分钟内的记录
new_df = df[df['timestamp'] <= df['start_time'] + pd.Timedelta(minutes=15)]
# 清理辅助列并重置索引
new_df = new_df.drop(columns='start_time').reset_index(drop=True)

方式二:使用groupby+apply(直观,适合小数据集)

对每个ID分组后,单独筛选符合条件的行:

def filter_group(group):
    start = group['timestamp'].min()
    return group[group['timestamp'] <= start + pd.Timedelta(minutes=15)]

new_df = df.groupby('id').apply(filter_group).reset_index(drop=True)

结果说明

运行后得到的new_df中,每个ID仅保留其最早时间点后15分钟内的记录。若需严格排除起始时间+15分钟整的记录,可将筛选条件中的<=改为<。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:45:37