Производительность выбора интервала данных - PullRequest
0 голосов
/ 18 октября 2018

У меня есть датафрейм со следующей структурой.(системное время - это индекс)

+---------------------+------+------+------+
| System_Time(index)  | var1 | var2 | var3 |
+---------------------+------+------+------+
| 2017-03-28 04:24:00 |    4 |    1 |    2 |
| 2017-03-28 04:32:00 |    5 |    4 |  453 |
| 2017-03-28 04:40:00 |    6 |   21 |    2 |
| 2017-03-28 04:48:00 |    2 |    9 |    5 |
| 2017-03-28 04:56:00 |    5 |    1 |    1 |
| 2017-03-28 05:04:00 |    1 |    2 |    2 |
| 2017-03-28 05:12:00 |    8 |    5 |    2 |
+---------------------+------+------+------+

Моя цель - циклически выбирать время.Пример: я хочу получить все строки между: 2017-03-28 04:24:00 и 2017-03-28 04: 24: 00.

в настоящее время я использую dataset.loc[start_date:end_date] (что делает работу.)

После этого я увеличиваю время на 8 минут (start_date и end_date), чтобы получить следующий выбор.(согласованный интервал в 54 минуты между start_date и end_date)

При каждом выборе я беру сумму, среднее значение или сначала для каждого столбца, чтобы получить одну строку (простые функции фрейма данных).После этого я выполняю запрос вставки, чтобы сохранить его в БД.

проблема:

Имеется примерно 15 миллионов записей, и обработка этого способа занимает около 8 часов.

Есть идеи, как мне улучшить производительность?

1 Ответ

0 голосов
/ 18 октября 2018

Похоже, что подобная проблема описана на форуме Data Science SO.

Исходя из предложений (крайне важно: использование функции rolling):

df["System time"] = pd.to_datetime(df["System time"]) # Convert column type to be datetime
indexed_df = df.set_index(["System time"])           # Create a datetime index
indexed_df = dataset.loc[start_date:end_date]
indexed_df.rolling('480s')                             # Create rolling windows of 8m length
indexed_df.rolling('480s').mean()                      # Then apply functions to rolling windows (here: mean but you can use any lambda as in groupby)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...