在 python 问题中使用 shift( ) 函数对移动 window 建模

Modelling a moving window with a shift( ) function in python problem

问题:假设我们向工厂供应机器人。这些机器人中的每一个都被编程为在 3 天后切换到工作模式(例如,如果它在第 1 天到达,它在第 3 天开始工作),然后它们工作 5 天。之后,电池电量耗尽,它们停止工作。每天供应的机器人数量各不相同。 下面的代码是前15天的补给:

import pandas as pd
df = pd.DataFrame({
  'date': ['01','02', '03', '04', '05','06', \
           '07','08','09','10', '11', '12', '13', '14', '15'],
  'value': [10,20,20,30,20,10,30,20,10,20,30,40,20,20,20]
})

df.set_index('date',inplace=True)
df

现在让我们像这样估算一下这些天每天的工作机器人数量(我们向后移动两天,只对过去 5 天内的数量求和):

04  10
05  20+10 = 30
06  20+20 = 40 
07  30+20 = 50
08  20+30 = 50
09  10+20 = 30
10  30+10 = 40
11  20+30 = 50
12  10+20 = 30
13  20+10 = 30
14  30+20 = 50 
15  40+30 = 70

是否可以在 python 中对此进行建模?我试过这个 - 不完全但是很接近。

df_p = (((df.rolling(2)).sum())).shift(5).rolling(1).mean().shift(-3)

p.s。如果您认为它不够复杂,那么我还需要包括每个数字的最后 7 天平均值以解决我的实际问题。

让我们尝试 shift forward first the window (5) less the rolling window length (2) and taking rolling sum 并将最短周期设置为 1:

shift_window = 5
rolling_window = 2
df['new_col'] = (
    df['value'].shift(shift_window - rolling_window)
        .rolling(rolling_window, min_periods=1).sum()
)

或使用硬编码值:

df['new_col'] = df['value'].shift(3).rolling(2, min_periods=1).sum()

df:

      value  new_col
date                
01       10      NaN
02       20      NaN
03       20      NaN
04       30     10.0
05       20     30.0
06       10     40.0
07       30     50.0
08       20     50.0
09       10     30.0
10       20     40.0
11       30     50.0
12       40     30.0
13       20     30.0
14       20     50.0
15       20     70.0