Как я могу получить сгруппированные окна в пандах? То есть как WINDOW OVER ... PARTITION BY ... из SQL - PullRequest
0 голосов
/ 12 ноября 2018

Функции окна 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 при попытке использовать временное окно.

1 Ответ

0 голосов
/ 12 ноября 2018

Удалите индекс, чтобы вы могли группировать по. Я думаю, что проблема с индексом столбца.

df.groupby(['col2','col3'], as_index=False)

...