У меня есть кадр данных, который выглядит следующим образом:
|-----------------------------------------------------|
| | category | pct_formation |
|-----------------------------------------------------|
|ts_timestamp | | |
|-----------------------------------------------------|
|2018-10-22 10:13:44.043 | in_petr | 37.07 |
|2018-10-22 10:17:09.527 | in_petr | 36.97 |
|2018-10-22 10:17:43.977 | in_dsh | 36.95 |
|2018-10-22 10:17:43.963 | in_dsh | 36.96 |
|2018-10-22 10:17:09.527 | in_petr | 32.96 |
|2018-10-22 10:19:44.040 | out_petr | 36.89 |
|2018-10-23 10:19:44.043 | out_petr | 36.90 |
|2018-10-23 10:19:37.267 | sync | 33.91 |
|2018-10-23 10:19:44.057 | sync | 36.96 |
|2018-10-23 10:19:16.750 | out_petr | 36.88 |
|2018-10-23 10:20:03.160 | sync | 36.98 |
|2018-10-23 10:20:32.350 | sync | 37.00 |
|2018-10-23 10:23:03.150 | sync | 34.58 |
|2018-10-23 10:22:18.633 | in_dsh | 36.98 |
|2018-10-23 10:25:39.557 | in_dsh | 36.97 |
|-----------------------------------------------------|
Данные содержат pct_formation
значения для различных категорий, собираемых в разное время каждый день (с нерегулярной частотой, с неравномерным интервалом).
Я хочу сравнить среднее значение pct_formation для каждой категории для 10-минутного скользящего окна между 9 и 11 часами утра, каждый день или среднее значение за неделю.
Проблема заключается в том, что данные для каждой категории не всегда начинаютсявход в 9 утра.Для некоторых это начинается в 9.10, для некоторых в 9.15, для некоторых в 10 утра и так далее.Кроме того, данные не приходят через регулярные промежутки времени.Как я могу получить 10-минутное скользящее среднее для каждого дня и каждой категории с 9:00 до 11:00?
Первоначально я преобразовал столбец ts_timestamp
в индекс:
df = df.set_index('ts_timestamp')
Затем,Я могу groupby
и использовать rolling()
как таковой:
df.groupby('category').rolling('10T').agg({'pct_formation': 'mean'})
Однако, это не показывает мне регулярные 10-минутные интервалы, но показывает временные метки из кадра данных.
Я понимаю,что мне нужно создать диапазон данных, например, для использования в качестве индекса:
pd.date_range(start=df.index.min().replace(hour=9, minute=0, second=0, microsecond=0),
end=df.index.max().replace(hour=11, minute=0, second=0, microsecond=0),
freq='10T')
#
# or should I use freq='1T' so that rolling() can do 10 minute intervals?
Но как я могу выровнять свой фрейм данных с этим диапазоном?Как я могу усреднить несколько значений, которые встречаются в диапазоне?
Я новичок в работе с данными временных рядов, и был бы признателен за любую помощь.Пожалуйста, не стесняйтесь спрашивать, если что-то не ясно.