【问题标题】:Modelling a moving window with a shift( ) function in python problem在 python 问题中使用 shift() 函数对移动窗口建模
【发布时间】:2021-10-24 03:18:03
【问题描述】:

问题:假设我们向工厂供应机器人。这些机器人中的每一个都被编程为在 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)

附言如果您认为它不够复杂,那么我还需要为我的实际问题包括每个这些数字的最后 7 天平均值。

【问题讨论】:

  • 仅供参考,shift 用于“与使用键盘上的右移键和/或左移键有关的问题”。并且不适用于此目的。
  • 你好,Corralien。我接受了。这个问题与那个问题非常相关。但是,我不能在这里使用 cumsum()。

标签: python-3.x pandas sum rolling-computation


【解决方案1】:

让我们先尝试 shift 将窗口 (5) 减去滚动窗口长度 (2) 并取 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

【讨论】:

  • 有趣。谢谢。我会看看我是否得到更多的回应,并在明天接受答案。
  • 让我知道它是否按预期工作。似乎它适用于这个例子,但我不知道这个逻辑有多持久。
猜你喜欢
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多