首页 > 解决方案 > 根据 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
]

标签: pythonpandas

解决方案


用于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]

推荐阅读