将间隔转换为DateTimes

问题描述 投票:0回答:1

我有一个DataFrame,其中包含某个传感器处于活动状态的时间间隔:

                 start                 end
0  2018-06-01 08:55:10 2018-06-01 09:01:00
1  2018-06-01 09:02:20 2018-06-01 09:04:55
2  2018-06-01 09:11:35 2018-06-01 09:23:44

我想对这些数据做一些时间序列分析。为此,我想将此数据转换为每个X分钟具有时间戳的正确时间序列。这里有一个X = 5 min的例子:

                 time active
0 2018-06-01 08:55:10      1
1 2018-06-01 09:00:10      1
2 2018-06-01 09:05:10      0
3 2018-06-01 09:10:10      1

如果传感器在区间qazxsw poi中有效,你可以将上面的内容读作“qazxsw poi”。

请注意,间隔并不总是不相交的。

目前,我正在以active == 1 min的频率将间隔转换为[t, t+X]。之后我再次重新采样该系列(占重叠间隔):

DatetimeIndex

我的数据集大约有15个条目。以上需要很长时间才能运行。我想这样做更有效率。

有没有人有个好主意?

python pandas datetime time-series intervals
1个回答
1
投票

如果间隔是不相交的并且行是排序的(假设一个传感器和顺序数据),就像在您的示例中一样,您可以执行一个简单的循环并逐行检查。

例:

X

数据帧:

indices = []
for _, row in df.iterrows():
    indices.append(pd.date_range(row['start'], row['end'], freq='5T'))
index = indices[0].append(indices[1:])
series = pd.Series(np.ones(len(index), dtype=bool), index=index)
series = series.resample('5T').max().fillna(0)

生成结果的代码:

import pandas as pd
import numpy as np

# Create your dataframe
x = np.array([
    ['2018-06-01 08:55:10', '2018-06-01 09:01:00'],
    ['2018-06-01 09:02:20', '2018-06-01 09:04:55'],
    ['2018-06-01 09:11:35', '2018-06-01 09:23:44']
    ])

df = pd.DataFrame(x, columns=['start', 'end'])
df['start'] = pd.to_datetime(df['start'])
df['end'] = pd.to_datetime(df['end'])
print(df)

结果:

     start                 end
0 2018-06-01 08:55:10 2018-06-01 09:01:00
1 2018-06-01 09:02:20 2018-06-01 09:04:55
2 2018-06-01 09:11:35 2018-06-01 09:23:44

15米行需要几秒钟。

© www.soinside.com 2019 - 2024. All rights reserved.