将数据框分区到重叠段
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-01
到2015-05-05
、2015-05-02
到2015-05-06
、2015-05-03
到2015-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-02
到 2018-05-06
的段(包括 5 天)。
我有一个带有时间索引的数据框,需要将其划分为重叠的段(比如长度为 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-01
到2015-05-05
、2015-05-02
到2015-05-06
、2015-05-03
到2015-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-02
到 2018-05-06
的段(包括 5 天)。