我正在尝试使用带有 groupby 的窗口大小为 2 的熊猫滚动功能。除了我还希望窗口包含当前值和进行值之外,这将是非常标准的。
具体来说,给定
df = pd.DataFrame({'groups':['a','a','a','a','a','b','b','b','b','b'],
'info': [i for i in range(10)]})
我想
pd.DataFrame({'groups':['a','a','a','a','a','b','b','b','b','b'],
'info': [i for i in range(10)],
'groupsum':[1, 3, 5, 7, nan, 11, 13, 15, 17, nan]})
我尝试了 2 种策略,但都没有奏效。我第一次尝试
indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)
df['groupsum'] = df.groupby('groups')['info'].rolling(window=indexer).mean().values
这种方式会导致内核崩溃,即使对于这个玩具数据框也是如此。非常好奇为什么。
我的第二种方法是反转数据框,然后使用常规的 groupby 滚动操作:
df = df.iloc[::-1].copy()
df.index = range(df.shape[0])
df['groupsum'] = df.groupby('groups')['info'].rolling(2).sum().values
虽然使用这种方法内核不会崩溃,但它不会产生我希望的数据帧;它产生
pd.DataFrame({'groups':['a','a','a','a','a','b','b','b','b','b'],
'info': [i for i in range(10)],
'groupsum':[nan, 7., 5., 3., 1., nan, 17., 15., 13., 11.]})
我想这里有一个我不知道的明显解决方案。任何帮助表示赞赏!