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
的原始值,就可以得到我们想要的结果。
我正在分析一个 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
的原始值,就可以得到我们想要的结果。