Groupby与TimeGrouper“向后”

发布于 2021-01-29 16:03:41

我有一个DataFrame时间序列:

rng = pd.date_range('2016-06-01', periods=24*7, freq='H')
ones = pd.Series([1]*24*7, rng)
rdf = pd.DataFrame({'a': ones})

最后输入是2016-06-07 23:00:00。我现在想将其归类为两天,基本上是这样的:

rdf.groupby(pd.TimeGrouper('2D')).sum()

但是,我想从我的最后一个数据点开始向后分组,所以不要获得此结果:

            a
2016-06-01  48
2016-06-03  48
2016-06-05  48
2016-06-07  24

我更希望这样:

            a
2016-06-01  24
2016-06-03  48
2016-06-05  48
2016-06-07  48

并按分组时'3D'

            a
2016-06-01  24
2016-06-04  72
2016-06-07  72

分组时的预期结果'4D'是:

            a
2016-06-03  72
2016-06-07  96

我无法想到的所有组合closedlabel等等。

我该如何实现?

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    由于我主要想按7天(也就是一周)进行分组,因此我现在使用此方法来找到所需的箱:

    from pandas.tseries.offsets import Week
    
    # Let's not make full weeks
    hours = 24*6*4
    rng = pd.date_range('2016-06-01', periods=hours, freq='H')
    
    # Set week start to whatever the last weekday of the range is
    print("Last day is %s" % rng[-1])
    freq = Week(weekday=rng[-1].weekday())
    
    ones = pd.Series([1]*hours, rng)
    rdf = pd.DataFrame({'a': ones})
    rdf.groupby(pd.TimeGrouper(freq=freq, closed='right', label='right')).sum()
    

    这给了我想要的输出

    2016-06-25  96
    2016-07-02  168
    2016-07-09  168
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看