给定 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。
这有几件事很奇怪:
- 运行最后一行有时不会使内核崩溃。如果是这种情况,第二次或第三次运行它会使内核崩溃。
- 运行最后一行
rolling(3)
永远不会使内核崩溃。 - 只是在
df.groupby('groups')['info'].rolling(window=indexer).mean().values
没有为其输出分配变量的情况下运行永远不会使内核崩溃。
我会称这是一个错误,但这意味着FixedForwardWindowIndexer
我没有更深入的了解。有没有什么方法可以得到想要的结果,而不会导致像反转数据框和使用这样的黑客攻击rolling(3)
?谢谢您的帮助。