Как изменить частоту кадров панд для моделирования средней недели? - PullRequest
1 голос
/ 29 мая 2019

У меня есть дата-кадр количества сообщений и периода времени, в который они были отправлены (с шагом 10 минут). Вот фрагмент кода:

+---------------------+--------------+
|      UnixTime       | Num messages |
+---------------------+--------------+
| 2019-02-01 00:00:00 |           54 |
| 2019-02-01 00:10:00 |           23 |
| 2019-02-01 00:20:00 |           36 |
+---------------------+--------------+

Этот фрейм данных имеет годичные временные метки и количество сообщений за этот период. Как я могу смоделировать среднюю / среднюю неделю, используя весь фрейм данных и в качестве справочного дня недели.

+-----------------+-------------------------+
| UnixTime (Mean) | Mean number of messages |
+-----------------+-------------------------+
| Friday 00:00:00 | 56.3                    |
| Friday 00:10:00 | 25.5                    |
| Friday 00:20:00 | 30.4                    |
+-----------------+-------------------------+

Таким образом, выходной фрейм данных должен моделировать среднюю неделю с понедельника по воскресенье для года с количеством сообщений, усредненных за год для этого периода времени и дня.

Я знаю, что могу получить день недели на df["Day Of Week"] = df['UnixTime'].dt.day_name(), но как мне смоделировать среднее значение, чтобы каждый понедельник года между 09:00 - 09:10 считался, например, одной и той же группой.

1 Ответ

1 голос
/ 29 мая 2019

У нас может быть новый столбец "weekNum", чтобы пометить каждую строку как часть N-й недели года.Мы можем сделать это с делением по полу на числовые значения дней.

df["weekNum"] = int(df["UnixTime"].dt.day//7)

Затем мы можем сгруппировать:

df.groupby("weekNum").mean()
df.groupby("Day of week").mean()

РЕДАКТИРОВАТЬ:

Чтобы получить каждые 10второй интервал, теперь, когда я понимаю ваш вопрос лучше ... мы можем использовать .strftime и отформатировать наше время для имени дня %A час, минута, секунда %H%M%S и сгруппировать по нему.

df["dayTime"] = df.UnixTime.dt.strftime("%A%H%M%S")
df.groupby("dayTime").mean()
...