Панды в среднем по отметке времени и дня недели - PullRequest
0 голосов
/ 10 октября 2019

У меня есть фрейм данных pandas в следующем формате:

            ds                    sensor_id           measurement
0    2019-09-13 12:40:00             20053             0.916667           
1    2019-09-13 12:45:00             20053             0.583333           
2    2019-09-13 12:50:00             20053             0.733333   

....

2837 2019-09-23 17:20:00             20053             2.900000

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

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

Ответы [ 3 ]

2 голосов
/ 10 октября 2019

IIUC, примерно так:

df = pd.DataFrame(np.random.random(2838),index=pd.date_range('2019-09-13 12:40:00', periods=2838, freq='5T'))

df.groupby(df.index.strftime('%A %H:%M')).mean()

Вывод:

                     0
Friday 00:00  0.992586
Friday 00:05  0.454352
Friday 00:10  0.747474
Friday 00:15  0.161208
Friday 00:20  0.422006
Friday 00:25  0.643614
Friday 00:30  0.450312
Friday 00:35  0.029722
Friday 00:40  0.316843
Friday 00:45  0.676068
...
Wednesday 23:10  0.424629
Wednesday 23:15  0.231609
Wednesday 23:20  0.987456
Wednesday 23:25  0.123619
Wednesday 23:30  0.203492
Wednesday 23:35  0.377411
Wednesday 23:40  0.131120
Wednesday 23:45  0.935324
Wednesday 23:50  0.910381
Wednesday 23:55  0.438193
0 голосов
/ 11 октября 2019

извлекает день недели с помощью известной вам функции из столбца ds и сохраняет ее в столбце "day_of_week", а также извлекает время (я имею в виду часы: минуты: секунды) в другой столбец "время". Тогда просто сделайте:

orginal_df.groupby(["day_of_week", "time"]).mean()
0 голосов
/ 10 октября 2019

Если я правильно понимаю ваш вопрос, при условии следующего ввода:

import numpy as np
date_range = pd.date_range('10/10/2019', periods=20, freq='Min')
df = pd.DataFrame({'measurement':np.random.randint(0, 100, len(date_range))}, index=date_range)

                     measurement
2019-10-10 00:00:00           13
2019-10-10 00:01:00           40
2019-10-10 00:02:00           86
............
............
2019-10-10 00:16:00           14
2019-10-10 00:17:00           89
2019-10-10 00:18:00           43
2019-10-10 00:19:00           96

попробуйте этот код:

df.resample('5Min').mean()

и даст:

                     measurement
2019-10-10 00:00:00         69.2
2019-10-10 00:05:00         41.8
2019-10-10 00:10:00         26.4
2019-10-10 00:15:00         46.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...