将数据框分区到重叠段

Partition dataframe to overlapping segments

我有一个带有时间索引的数据框,需要将其划分为重叠的段(比如长度为 5 天,偏移量为 1 天)。

这是一个示例数据框:

import pandas as pd    
i=pd.date_range('05-01-2015', '21-05-2018', freq='D')
x=pd.DataFrame(index=i, data = np.random.randint(0, 100, len(i)))

分区后各段的索引范围分别为2015-05-012015-05-052015-05-022015-05-062015-05-032015-05-08 等。我认为 groupby 应该有一些技巧来做到这一点,但无法提出有效的实施。

作为参考,这是在mathematica中实现的:

Partition[list,n,d] - 生成偏移量为 d 的子列表。

非常感谢你们提供的任何见解。

正如@alkasm 指出的那样,您可以使用 pandas 中的 rolling 使用示例数据帧对 5 天分区执行聚合计算:

import pandas as pd    
i = pd.date_range('05-01-2015', '21-05-2018', freq='D')
x = pd.DataFrame(index=i, data = np.random.randint(0, 100, len(i)))

x.rolling(5).sum()

这样做的诀窍在于,它会计算 向后 的聚合函数,因此您可能需要扩展索引以包含四天之前的内容。数据帧中索引为 2018-05-06 且具有 5 行 rolling() 调用的行将代表 2018-05-022018-05-06 的段(包括 5 天)。