我有found a few个相关问题,但似乎都没有做到这一点。我想要一个与this类似的实现,但需要使用pandas数据帧结构。下面我将创建整个2016年的样本数据,其中包含366行。
import pandas as pd
import numpy as np
dates=pd.date_range('2016-01-01','2016-12-31')
random_data=np.random.randn(len(dates))
data=pd.DataFrame(random_data,index=dates,columns=['Test'])
我想使用groupby每2天获取接下来的5天数据。普通groupby没有重叠的时间帧;投入2天的分组将给我183(366/2)组有两天数据。组合5天将给我约74(366/5)组,每组5天。我想要183组,每组五天。
如果不清楚,请提前抱歉。这就是我想要的:
Test
2016-02-08 1.073696
2016-02-09 1.169865
2016-02-10 1.421454
2016-02-11 -0.576036
2016-02-12 -1.066921
Test
2016-02-10 1.421454
2016-02-11 -0.576036
2016-02-12 -1.066921
2016-02-13 2.639681
2016-02-14 -0.261616
这是data.groupby(pd.TimeGrouper('2d'))
Test
2016-02-08 1.073696
2016-02-09 1.169865
Test
2016-02-10 1.421454
2016-02-11 -0.576036
Test
2016-02-12 -1.066921
2016-02-13 2.639681
这是data.groupby(pd.TimeGrouper('5d'))
Test
2016-02-08 0.898029
2016-02-09 -0.905950
2016-02-10 -0.202483
2016-02-11 1.073696
2016-02-12 1.169865
Test
2016-02-13 1.421454
2016-02-14 -0.576036
2016-02-15 -1.066921
2016-02-16 2.639681
2016-02-17 -0.261616
答案 0 :(得分:2)
如果日期是正常序列,并且样本数据显示为一天,则可以使用索引来获取行。 从每两行开始,为每个选择选择五行:
[data.iloc[i:(i+5)] for i in range(0, len(data), 2)]
#[ Test
# 2016-01-01 0.450173
# 2016-01-02 -0.496819
# 2016-01-03 0.270781
# 2016-01-04 -0.207634
# 2016-01-05 1.032061,
# Test
# 2016-01-03 0.270781
# 2016-01-04 -0.207634
# 2016-01-05 1.032061
# 2016-01-06 -0.470462
# 2016-01-07 -1.077634, ...]