Функции окна Pandas, т.е. rolling
работают отлично. Однако, исходя из SQL, я знаю, что окна также могут быть PARTITIONED BY
некоторой группой.
Как я могу получить сгруппированные окна в пандах?
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
при попытке использовать временное окно.