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

如何基于指定列的timedelta阈值将pandas DataFrame拆分为多个子帧

实现代码

直接执行以下代码即可得到目标子帧列表:

import pandas as pd
import numpy as np

# 原有数据构造与阈值计算代码
rng = pd.date_range('2015-02-24', periods=5, freq='T')
df = pd.DataFrame({ 'timestamp': rng, 'Val': np.random.randn(len(rng)) })
df = df.drop(df.index[[2]])
freq = pd.to_timedelta(np.diff(df.timestamp).min())

# 核心拆分逻辑
group_ids = (df['timestamp'].diff() > freq).cumsum()
sub_dfs = [group.reset_index(drop=True) for _, group in df.groupby(group_ids)]
逻辑说明
  • df['timestamp'].diff() 计算每行与上一行的时间差,首行结果为NaT
  • 比较时间差与阈值得到布尔序列,时间差大于阈值的位置标记为True
  • 对布尔序列执行累积和cumsum(),每次遇到True分组ID自动+1,连续时间差不超过阈值的行会被划分到同一分组
  • 遍历groupby结果并重置每个子帧的索引,即可得到符合预期的子帧列表

注意:如果原数据的timestamp列未按时间升序排列,需要先执行df = df.sort_values('timestamp').reset_index(drop=True)再执行拆分逻辑,避免时间差计算错误。

输出验证

打印sub_dfs即可看到预期输出结构:

[           timestamp       Val
0 2015-02-24 00:00:00  0.010965
1 2015-02-24 00:01:00 -1.677391,
            timestamp       Val
0 2015-02-24 00:03:00 -1.079073
1 2015-02-24 00:04:00  1.534352]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:21:01