Предположим, что ваш DataFrame содержит что-то вроде следующего:
Order Date Time Amount
0 2020-01-02 10:00:00 62
1 2020-01-02 10:46:43 18
2 2020-01-02 11:38:15 56
3 2020-01-02 11:55:37 34
4 2020-01-02 12:46:22 41
5 2020-01-02 13:00:34 61
6 2020-01-02 13:58:08 46
7 2020-01-02 14:32:45 38
8 2020-01-02 14:44:31 12
9 2020-01-02 15:08:44 39
...
, то есть:
- Дата заказа Время - дата / время события, типа datetime (если вы читаете его как string , вы конвертируете его, вызывая pd.to_datetime ),
- Amount (и, возможно, другие столбцы) - данные, относящиеся к каждому заказу.
Результат можно получить следующим образом:
Создать временный кадр данных со строками Выполнение вашего условия:
df2 = df['Order Date Time'].dt.hour.between(10, 22)
Установите количество наиболее распространенных часов / минут:
n = 10
Вычислите фактический результат:
df2.groupby(df['Order Date Time'].dt.strftime('%H:%M')).size()\
.sort_values(ascending=False).head(n)
Подробности:
df2.groupby(...)
- группировка заказов по часам / минутам (без учета секунд и части даты), size()
- вычислить размер каждой группы, sort_values(...)
- сортировка (в порядке убывания), head(n)
- получить верхние значения n .
Для моих рабочих данных я получил: * 105 9 *
Order Date Time
10:00 20
22:51 17
19:04 15
13:24 15
13:50 14
13:10 14
12:58 14
15:29 14
19:17 13
18:03 13