pandas DF中的类别更改时重置滚动计算

yyyllmsg  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(77)

我有一个df看起来像这样:

Category    Product     Location    Date formatted  Volume
    0   A           TYPE_B      Central     2019-04-01      13.0
    1   A           TYPE_B      Central     2019-05-01      13.0
    2   A           TYPE_B      Central     2019-06-01      12.0
    3   A           TYPE_B      Central     2019-07-01      14.0
    4   A           TYPE_B      Central     2019-08-01      14.0
    5   A           TYPE_B      Central     2019-09-01      13.0
    6   A           TYPE_B      Central     2019-10-01      14.0
    7   A           TYPE_B      Central     2019-11-01      13.0
    8   A           TYPE_B      Central     2019-12-01      13.0
    9   A           TYPE_B      Central     2020-01-01      13.0
    10  A           TYPE_B      Central     2020-02-01      13.0
    11  A           TYPE_B      Central     2020-03-01      15.0
    12  A           TYPE_B      East        2019-04-01      21.0
    13  A           TYPE_B      East        2019-05-01      20.0
    14  A           TYPE_B      East        2019-06-01      18.0
    15  A           TYPE_B      East        2019-07-01      21.0
    16  A           TYPE_B      East        2019-08-01      22.0
    17  A           TYPE_B      East        2019-09-01      19.0
    18  A           TYPE_B      East        2019-10-01      20.0
    19  A           TYPE_B      East        2019-11-01      20.0
    20  A           TYPE_B      East        2019-12-01      19.0
    21  A           TYPE_B      East        2020-01-01      20.0
    22  A           TYPE_B      East        2020-02-01      20.0
    23  A           TYPE_B      East        2020-03-01      27.0

字符串
我试图从数据的开始(“2019-04-01”)和结束(“2020-03-01”)时间框架计算每个位置的滚动3个月量,到目前为止,我使用以下代码:

df['Rolling_3_'] = df.loc.iloc[:,4].rolling(window=4).mean()


这为我提供了整个数据框架的滚动3个月平均值。然而,有人知道我如何重新启动滚动月份计算,以便当它到达另一个“位置”(如“东部”)时,它将计算该位置的滚动3个月平均值,并继续移动到下一个位置,重新启动计算?实质上计算整个数据集的滚动3个月,但值适用于该位置。有没有办法让我用约会来做这个?例如当“2019-04-01”再次出现时,计算重新开始。
非常感谢您提前提供的任何帮助/建议!
谨致问候,

bogh5gae

bogh5gae1#

您可以通过以下方式执行分组:

df.groupby(['Category','Product','Location']).Volume.rolling(3).mean()

字符串
为您提供:

Category  Product  Location    
A         TYPE_B   Central   0           NaN
                             1           NaN
                             2     12.666667
                             3     13.000000
                             4     13.333333
                             5     13.666667
                             6     13.666667
                             7     13.333333
                             8     13.333333
                             9     13.000000
                             10    13.000000
                             11    13.666667
                   East      12          NaN
                             13          NaN
                             14    19.666667
                             15    19.666667
                             16    20.333333
                             17    20.666667
                             18    20.333333
                             19    19.666667
                             20    19.666667
                             21    19.666667
                             22    19.666667
                             23    22.333333
Name: Volume, dtype: float64


为了将其放入数据框架中,由于索引的不同,您需要传递底层numpy数组

# notice `values` at the end
df['rolling_mean'] = df.groupby(['Category','Product','Location']).Volume.rolling(3).mean().values

相关问题