Python перекрывающийся скользящий кадр данных - PullRequest
0 голосов
/ 08 апреля 2020

Я реализую алгоритм машинного обучения и извлекаю функции из фрейма данных. Мне явно нужно перекрытие windows. Предположим, что DataFrame выглядит следующим образом

 x     y   z
 12.1  11  0.5
 12.2  10  0.3
 12.4  11  0.5
 12.8  12  0.4
 13.1  13  0.4
 14.7  14  0.5
 15.2  14  0.6
 15.3  13  0.5
 17.3  14  0.5
 18.2  15  0.4
 16.1  16  0.2
 15.0  17  0.1

Но на самом деле он намного больше (тысячи образцов). Теперь я хочу получить список фреймов данных, где каждый DataFrame имеет длину ws (здесь 150) и имеет step (шаг) 60.

Это то, что я получил

r = np.arange(len(df))
s = r[::step]
return [df.iloc[k:k+ws] for k in s]

Это работает довольно хорошо, но есть еще одна проблема. Последние 1,2 или 3 кадра могут не иметь длины ws. Я также не могу просто отбросить последние 3, так как иногда есть только один, длина которого меньше ws. Так что переменная s просто хранит все стартовые индексы, мне нужен способ иметь только стартовые индексы, где start_index + step < len(df). Если, конечно, есть лучшие и более быстрые способы для этого (возможно, библиотека). Вся существующая документация говорит только о простых массивах.

1 Ответ

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

Вам может потребоваться только изменить s:

s = r[:len(df)-ws+1:step]

Таким образом вы найдете только начальные индексы кадров с длиной ws.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...