我有一个时间序列,行之间的子序列具有相同的时间增量,但所有子序列之间的时间增量并不相同。
series
>>>
timestamp
2018-06-12 08:01:00 0.5456 # minute intervals
2018-06-12 08:02:00 0.4734
2018-06-12 08:03:00 0.6723
...
2018-09-12 15:00:00 1.2449 # hour intervals
2018-09-12 16:00:00 1.2834
2018-09-12 17:00:00 1.4923
是否可以将这个系列分成具有相同时间延迟的块?理想的输出将是某种系列列表,每个系列具有相同的时间增量并且系列之间没有重叠。
desired_output
>>> [
# series 1
timestamp
2018-06-12 08:01:00 0.5456 # minute intervals
2018-06-12 08:02:00 0.4734
2018-06-12 08:03:00 0.6723
...
,
# series 2
2018-09-12 15:00:00 1.2449 # hour intervals
2018-09-12 16:00:00 1.2834
2018-09-12 17:00:00 1.4923
...
,
# so on
]
我查看了 pandas Grouper 函数,尽管我找不到任何执行此操作的方法。
np.diff
创建一个具有时间增量的新列,并使用 pandas groupby
。
import pandas as pd
import numpy as np
# Dummy data
data = [0.45, 0.47, 0.62, 1.21, 1.21, 0.21, \
2.54, 3.45, 4.12, 2.01, 2.1]
id1 = pd.date_range(start='2018-06-12 08:01:00', periods=6, freq='T')
id2 = pd.date_range(start='2018-06-12 08:06:00', periods=6, freq='H')
join_index = id1.union(id2)
df = pd.DataFrame(data)
df.index = join_index
# Create a column with the time delta
df['deltaT'] = np.append(np.diff(df.index.values) , np.diff(df.index.values)[-1])
# Group by the latter
grouper = df.groupby(by='deltaT')
Series_freq = []
for name , group in grouper:
Series_freq.append(group)
print(Series_freq)
输出:
[ 0 deltaT
2018-06-12 08:01:00 0.45 0 days 00:01:00
2018-06-12 08:02:00 0.47 0 days 00:01:00
2018-06-12 08:03:00 0.62 0 days 00:01:00
2018-06-12 08:04:00 1.21 0 days 00:01:00
2018-06-12 08:05:00 1.21 0 days 00:01:00,
0 deltaT
2018-06-12 08:06:00 0.21 0 days 01:00:00
2018-06-12 09:06:00 2.54 0 days 01:00:00
2018-06-12 10:06:00 3.45 0 days 01:00:00
2018-06-12 11:06:00 4.12 0 days 01:00:00
2018-06-12 12:06:00 2.01 0 days 01:00:00
2018-06-12 13:06:00 2.10 0 days 01:00:00]
这并不完美,因为我不确定如何处理频率变化的行...在这种情况下,
2018-06-12 08:06:00
索引应该包含在两个系列中,第一个,第二个?