首页 文章

大熊猫滚动groupby timeseries数据[重复]

提问于
浏览
1

这个问题在这里已有答案:

我有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

1 回答

  • 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, ...]
    

相关问题