Pandas MultiIndex DataFrame.rolling偏移量

时间:2018-02-23 21:12:26

标签: python pandas dataframe aggregate multi-index

为什么我不能在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级索引项目的最有效的解决方法是什么?

1 个答案:

答案 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()