Разделение кадра данных на перекрывающиеся сегменты - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть фрейм данных с временными индексами, и мне нужно разбить его на перекрывающиеся сегменты (скажем, 5 дней с смещением в 1 день).

Вот пример фрейма данных:

import pandas as pd    
i=pd.date_range('05-01-2015', '21-05-2018', freq='D')
x=pd.DataFrame(index=i, data = np.random.randint(0, 100, len(i)))

После разбиения индексы сегментов должны изменяться соответственно от 2015-05-01 до 2015-05-05, от 2015-05-02 до 2015-05-06, от 2015-05-03 до 2015-05-08 и c. Я предполагаю, что должен быть какой-то трюк с groupby, чтобы сделать это, но не смог придумать эффективную реализацию.

В качестве справки, это реализовано в mathematica :

Partition[list,n,d] - генерирует подсписки со смещением d.

Буду очень признателен за любую проницательность Вы, ребята, можете предоставить.

1 Ответ

1 голос
/ 08 февраля 2020

Как указал @alkasm, вы можете выполнять агрегированные вычисления на 5-дневных разделах, используя ваш примерный кадр данных, используя rolling в pandas:

import pandas as pd    
i = pd.date_range('05-01-2015', '21-05-2018', freq='D')
x = pd.DataFrame(index=i, data = np.random.randint(0, 100, len(i)))

x.rolling(5).sum()

Хитрость в том, что она вычисляет агрегатная функция смотрит назад назад , поэтому вам может потребоваться расширить индекс, включив в него четыре дня назад. Строка в вашем фрейме данных с индексом 2018-05-06 с 5-строчным вызовом rolling() будет представлять сегмент от 2018-05-02 до 2018-05-06 включительно (что составляет 5 дней).

...