Pandas窗口函数,即rolling
,工作效果很好。但是从SQL我知道,windows也可以是PARTITIONED BY
的某个组。
如何在Panda中获得分组窗口?A:
df.groupby(['group']).rolling('10s').mean()
失败:
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'MultiIndex'
如果使用df.rolling('10s', on='group')
,它只在'group'为int的情况下有效,即在SQL中,前面/后面有一些具体的行数。我怎样才能按时间保存窗口?
编辑最小样本:
import random
groups = ['A', 'B']
df = pd.DataFrame({'value': range(60), 'group': [random.choice(groups) for i in range(60)]},index=pd.DatetimeIndex(pd.date_range(start='20160101', end='20160229')))
df.head()
以下工作,但不考虑组:
df[['value']].rolling('2d').mean().head()
以下内容不适用于时间窗口:
df[['group','value']].rolling(3, on='group').mean().head()
和
df.rolling('2D', on='group').mean().head()
尝试使用时间窗口时失败,返回:window must be an integer
。
删除索引以便分组。我认为是索引列的问题。
df.groupby(['col2','col3'], as_index=False)