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

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

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

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 函数,尽管我找不到任何执行此操作的方法。

python pandas datetime group-by time-series
1个回答
0
投票

您可以使用

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

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