python - 根据 timedelta 将 pandas 帧拆分为多个帧
问题描述
我正在努力弄清楚如何根据指定列的时间增量将熊猫数据帧拆分为多个数据帧。因此,鉴于以下情况:
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]])
这导致:
timestamp Val
0 2015-02-24 00:00:00 0.010965
1 2015-02-24 00:01:00 -1.677391
3 2015-02-24 00:03:00 -1.079073
4 2015-02-24 00:04:00 1.534352
现在,我想要分割的频率是:
freq = pd.to_timedelta(np.diff(df.timestamp).min())
# Timedelta('0 days 00:01:00')
现在我被困在最后一步,我想把这个帧分成多个子帧,只要这个增量超过这个最小值。
预期输出:
[
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
]
解决方案
用于diff
计算相邻时间戳之间的差异并将其与 进行比较freq
,然后split
按位置使用numpy.split
:
import numpy as np
np.split(df, np.flatnonzero(df.timestamp.diff() > freq))
[ timestamp Val
0 2015-02-24 00:00:00 0.123225
1 2015-02-24 00:01:00 -1.786254, timestamp Val
3 2015-02-24 00:03:00 0.291738
4 2015-02-24 00:04:00 -0.548131]
推荐阅读
- sql - 选择数组中的最后一个公共元素
- apache-spark - 将 Spark 累加器与结构化流结合使用
- excel - 查询按日期和用户对这些行进行分组,在特定事件后开始一个新组
- google-apps-script - TypeError:response.getContentText 不是函数应用脚本
- image - Latex 图像页眉和页脚
- github - 使用自定义域使用 GitHub 页面托管文件时获取“页面 url”?
- configuration - Gulp 和 Coffeescript - 信号异步完成警告
- dart - 如何检查列表是否包含列表,并从列表中删除列表
- php - 集合属性中的 PHP Blade Foreach 元素
- jenkins - Jenkins kubernetes-plugin 与多个集群对话