Эффективно создать широкую таблицу в Pandas из нескольких рядов с помощью скользящего окна - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть 600 столбцов данных, который составляет приблизительно 1 000 000 строк.Все ячейки с плавающей точкой32.

Мне нужно перемещать скользящее окно (длина 30) по кадрам данных по строкам, чтобы создать новую строку, которая объединяет их в окне.Это будет 600 * 30 == 18000 в ширину и приблизительно 1,000,000 - 30 в длину (строки).Из-за скользящего окна строки в исходном кадре данных дублируются (в зависимости от проекта).

Ниже приведен примерный ( непроверенный ) код для обобщения требований.На самом деле я бы выделил пустой массив правильной длины вместо списка Xy_hist = [] python.

# tmp is the large df already defined
total_size = tmp.shape[0]
window_size = 30
Xy_hist = []
for x in range(total_size-window_size):
    tmp_df = tmp.iloc[0+x:window_size+x,:].stack().to_frame().T
    tmp_df.columns = tmp_df.columns.get_level_values(1)
    Xy_hist.append(tmp_df)
res = pd.concat(Xy_hist)

Я считаю, что этот подход очень неэффективен в памяти и, вероятно, неэффективен в вычислительном отношении.Есть ли лучший более питонический и / или нативный подход панд для решения этой проблемы?

1 Ответ

0 голосов
/ 30 декабря 2018

Я не уверен, что это именно то, что вам нужно, только мое решение «бычий глаз», вы можете сделать:

total_size = tmp.shape[0]
window_size = 30
res = pd.concat([tmp.iloc[x:window_size+x,:] for x in range(0, total_size, window_size)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...