我有一个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个条目。以上需要很长时间才能运行。我想这样做更有效率。
有没有人有个好主意?
如果间隔是不相交的并且行是排序的(假设一个传感器和顺序数据),就像在您的示例中一样,您可以执行一个简单的循环并逐行检查。
例:
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米行需要几秒钟。