如何将熊猫时间序列索引分组为具有相同频率的组



我有一个时间序列,行之间的子序列具有相同的时间增量,但并非所有子序列之间的时间增量都相同。

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创建一个具有时间增量的新列,并使用pandasgroupby

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索引应该同时包含在第一个和第二个系列中?

最新更新