针对特定条件在 Pandas 数据框中创建滞后特征

时间:2021-03-22 08:46:35

标签: python pandas

我目前正在开展一个项目,该项目使用 13 家不同商店的 70 种不同产品的销售数据。我想使用数据创建一个时间序列模型,因此我希望制作滞后的销售功能。数据框如下所示:

Out[73]: 
        record_ID      week  store_id  sku_id  units_sold
0               1  17/01/11      8091  216418          20
1               2  17/01/11      8091  216419          28
2               3  17/01/11      8091  216425          19
3               4  17/01/11      8091  216233          44
4               5  17/01/11      8091  217390          52
          ...       ...       ...     ...         ...
150145     212638  09/07/13      9984  223245          38
150146     212639  09/07/13      9984  223153          30
150147     212642  09/07/13      9984  245338          31
150148     212643  09/07/13      9984  547934          12
150149     212644  09/07/13      9984  679023          15

我想创建 units_sold 目标变量的滞后特征。问题是,我想为每个产品 (sku_id) 以及商店 (store_id) 执行此操作。当我制作滞后特征时,我得到了正确的结果,但是它会按数据集的顺序考虑所有产品。这可以在下面看到。

Out[76]: 
   record_ID      week  store_id  sku_id  units_sold  lagged_sales
0          1  17/01/11      8091  216418          20           NaN
1          2  17/01/11      8091  216419          28          20.0  #I do not want this lag to be here, since it is the lag of a different product!
2          3  17/01/11      8091  216425          19          28.0
3          4  17/01/11      8091  216233          44          19.0
4          5  17/01/11      8091  217390          52          44.0
5          9  17/01/11      8091  219009          18          52.0
6         10  17/01/11      8091  219029          47          18.0
7         13  17/01/11      8091  223245          50          47.0
8         14  17/01/11      8091  223153          82          50.0
9         17  17/01/11      8095  216418          99          82.0

如您所见,滞后特征只是按顺序为每个条目获取移位的units_sold。这反过来又考虑了不同产品的units_sold。例如,当您考虑一瓶百事可乐时,数据集会创建一个滞后单位,比如一瓶可乐。 (不同的 SKU_id)

我想制作一个滞后功能,显示每个产品/商店组合。仅考虑以下一种产品/商店组合时可以看出此问题:

对于商店 8095 中的产品 222087

temptrain = temptrain[temptrain['sku_id'] == 222087]
temptrain = temptrain[temptrain['store_id'] == 8095]

       record_ID      week  store_id  sku_id  units_sold  lagged_sales
18            30  17/01/11      8095  222087         214         102.0
1173        1670  24/01/11      8095  222087         129          35.0
2328        3306  31/01/11      8095  222087          64          64.0
3483        4942  07/02/11      8095  222087          71          82.0
4638        6582  14/02/11      8095  222087          88         282.0
5793        8220  21/02/11      8095  222087         135         171.0
6948        9854  28/02/11      8095  222087         131          66.0
8103       11469  07/03/11      8095  222087         113          56.0

很明显我的实现是错误的。 Lagged_sales 功能应该显示此特定产品/商店组合的滞后销售额。这是错误的,因为数据在第二个数据帧 (Out[76]:) 中的结构方式。如果有人能帮我解决这个问题,我将不胜感激。

我知道如果我像在最后一个数据帧中那样为每个商店/sku 组合明确创建一个新的数据帧,我就可以做到这一点,但是我想将其实现到我的初始数据帧中。

(注意:对不起,如果这令人困惑,很难准确表达我的意思)

0 个答案:

没有答案