为什么我不能在rng = pd.date_range('2017-01-03', periods=20, freq='8D')
i = pd.MultiIndex.from_product([['A','B','C'], rng], names=['Name','Date'])
df = pd.DataFrame(np.random.randn(60), i, columns=['Vals'])
多索引DataFrame时使用偏移?例如,使用:
df['Avg'] = df.groupby(['Name'])['Vals'].rolling('30D').mean() # << Why doesn't this work?
如果我尝试使用偏移量进行分组和滚动,我会得到“ ValueError:window必须是整数”:
int
并非以下这些变体符合我的需求,但请注意使用df['Avg'] = df.groupby(['Name'])['Vals'].rolling(4).mean()
进行分组和滚动有效:
d = df.loc['A']
d['Avg'] = d['Vals'].rolling('30D').mean()
我可以在DataFrame的单索引子集上使用偏移量滚动:
./runtime/local/bin/crawl
如果真的不可能在多索引DataFrame上使用偏移量滚动,那么将一个应用于每个0级索引项目的最有效的解决方法是什么?
答案 0 :(得分:2)
为了使用像&#39; 30D&#39;你需要一个简单的日期索引。在这种情况下,实现这一目标的最简单方法是移动名称&#39;超出reset_index(level='Name')
的索引,只剩下&#39;日期&#39;作为索引:
df['Avg'] = df.reset_index(level='Name').groupby(['Name'])['Vals'].rolling('30D').mean()