Pandas groupby-聚合在 shift() 操作后不起作用

Pandas groupby-aggregation not working after shift() operation

我正在分析一个 Kaggle 项目,发现以下不一致:

我们有商店 (1, 2, 3) 和商品 (1, 2, 3, 4, 5) 的销售数据。原作者想要计算商店、项目和期间的每个组合的总和和均值 (month/year)。由于 s/he 认为我们在预测当月的销售额时应该只了解前几个月的情况,因此 s/he 决定将销售额向量移动 1。但这会导致商店 1 上个月的销售额出现问题产品 1 成为商店 1 产品 2 的一部分。

data.groupby(["store", "item", "period"]).sales.agg(["sum", "mean"]).shift(1)

我最初的想法是在分组之后聚合之前移动移位操作。

data.groupby(["store", "item", "period"]).sales.shift(1).agg(["sum", "mean"])

查看第二行代码的输出让我感到非常惊讶。似乎聚合在执行移位后不遵守 groupby 索引。

显示代码和输出的屏幕截图:

有没有人经历过类似的事情?移位真的会从 groupby 操作中删除索引吗?

编辑:

将 link 添加到原始 kaggle 工作簿: https://www.kaggle.com/ekrembayar/store-item-demand-forecasting-with-lgbm

试试这样的东西:

data['sales'] = data.groupby(["store", "item", "period"]).sales.transform('shift')
print(data.groupby(["store", "item", "period"]).sales.agg(["sum", "mean"]))

您可以依次尝试使用2个groupby(),如下:

(data.groupby(["store", "item", "period"]).sales.shift(1)
     .groupby([df["store"], df["item"], df["period"]]).agg(["sum", "mean"])
)

这样,我们不需要改变sales的原始值,就可以得到我们想要的结果。