首页 > 解决方案 > 带有 FixedForwardWindowIndexer 的 Pandas groupby 使内核在小型 DataFrame 中崩溃

问题描述

给定 2 个组,我想取同一组中 3 个元素的滑动窗口平均值。此外,我希望滑动窗口向前看,而不是向后看。以下是我执行上述操作的代码:

import pandas as pd 
df = pd.DataFrame({'groups':['a','a','a','a','a','b','b','b','b','b'], 
                   'info': [i for i in range(10)]})

indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=3)
df['shifted_means'] = df.groupby('groups')['info'].rolling(window=indexer).mean().values

期望的结果应该是

pd.DataFrame({'groups':['a','a','a','a','a','b','b','b','b','b'], 
                   'info': [i for i in range(10)],
                   'shifted_means':[ 1.,  2.,  3., nan, nan,  6.,  7.,  8., nan, nan]})

在 kaggle 笔记本和 Spyder 中,我的内核在运行第一块代码时就死了。我的桌面有带有 Ubuntu 的 pandas 1.1.3。

这有几件事很奇怪:

  1. 运行最后一行有时不会使内核崩溃。如果是这种情况,第二次或第三次运行它会使内核崩溃。
  2. 运行最后一行rolling(3)永远不会使内核崩溃。
  3. 只是在df.groupby('groups')['info'].rolling(window=indexer).mean().values没有为其输出分配变量的情况下运行永远不会使内核崩溃。

我会称这是一个错误,但这意味着FixedForwardWindowIndexer我没有更深入的了解。有没有什么方法可以得到想要的结果,而不会导致像反转数据框和使用这样的黑客攻击rolling(3)?谢谢您的帮助。

标签: pandaspandas-groupbypandas-rolling

解决方案


推荐阅读