首页 > 解决方案 > Pandas 中至少过去 n 周的最后一个季度的滚动平均值(如果存在至少一个数据点)

问题描述

我需要从数据帧计算计算如下:

我有一个包含三列(W、Q、Val)的数据框。数据是时间,因此我们可以将 W 视为周,将 Q 视为 Qtr(为了清楚起见,我们也可以添加一年)

        df 
        
                 W            Q          Val
                  
                 1           1            0
                 2           1            6
                 3           1            9
                 4           1            13
                 5           1            19
                 6           1            10
                 7           2            6
                 8           2            8
                 9           2            16
                 10          2            NULL
                 11          2            NULL
                 12          2            NULL
                 13          3            1
                 14          3            2
                 15          3            6
                 16          3            12
                 17          3            NULL
                 18          3            NULL
                 19          4            14
                 20          4            2
                 21          4            4
                 22          4            7
                 23          4            7
                 24          4            13
                 1           1            14
                 2           1            2
                 3           1            4
                 4           1            7
                 5           1            9
                 6           1            13
                 

所以我想要执行的事情如下(我假设我们在一个季度中有 6 周(假设 6 而不是 13 减少打字)周):

对于每个季度,我想检查最后一个季度的最后 3 (n=3) 周,如果它不为空,那么我平均该季度所有周的数据,否则如果数据为 NULL(在 3 周上个季度),然后我检查同一季度的前 3 周并取平均值(如果它也为空,则分配 0 )。

现在有两个紧迫的问题,如何进行汇总,并确保按时间顺序进行汇总,假设 Q4 之后是 Q1 等等。我在下面显示了预期的输出。

为了解释下面的输出,我们看到在第一季度(比如前一年)我们没有任何数据,所以所有汇总平均值都是 NULL。但是在第二季度,我们看到第一季度我们有最后 3 周(我们有 13+19+13 =42,平均为 13),所以我们有 13 作为第二季度所有周的平均值。对于 Q3,我们看到 Q2 的最后 3 周没有数据,所以我们转到前 3 周(在本例中为 6、8、16,平均值为 10),因此所有周的 avg 值Q3 应该是 10 等等。

现在,当我们移至明年第一季度时,我们应该按照去年第四季度的类似逻辑进行汇总。

        output_df 
        
        
                 W           Q          ValAVG
                  
                 1           1            NULL
                 2           1            NULL
                 3           1            NULL
                 4           1            NULL
                 5           1            NULL
                 6           1            NULL
                 7           2            13
                 8           2            12
                 9           2            13
                 10          2            13
                 11          2            13
                 12          2            13
                 13          3            10
                 14          3            10
                 15          3            10
                 16          3            10
                 17          3            10
                 18          3            10
                 19          4            12
                 20          4            12
                 21          4            12
                 22          4            12
                 23          4            12
                 24          4            12
                 1           1            9
                 2           1            9
                 3           1            9
                 4           1            9
                 5           1            9
                 6           1            9
                 

老实说,不知道如何实现逻辑。任何帮助或指导都将受到极大的重视。提前致谢。

标签: pandasdatetimegroupinglagrollup

解决方案


推荐阅读