Как сгруппировать фрейм данных pandas по неравному временному интервалу или строковому значению

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

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

 df.&roupby(pd.Grouper(key='Date', freq='1D')).a&&({'Low':[np.min],'Hi&h':[np.max] })
  

Теперь, вместо того, чтобы получать весь день, мне нужно сократить фрейм данных до разделенного дня с неравными интервалами. Скажем, с 7:00 до 15:00 и с 15:00 до 22:00.
Как я мог это сделать? freq='' допускает только равные интервалы.
У меня также есть столбец со значением ‘A’ для первой части дня и ‘B’ для второй части дня, на случай, если его легче сгруппировать.

 Date                    Hi&h    Low     Session
0   2019-06-20 07:00:00 2927.50 2926.75 A
1   2019-06-20 07:05:00 2927.50 2927.00 A
2   2019-06-20 07:10:00 2927.25 2926.50 A
3   2019-06-20 07:15:00 2926.75 2926.25 A
4   2019-06-20 07:20:00 2926.75 2926.00 A
  

Комментарии:

1. Вы просто отбрасываете что-нибудь между (22:00:00, 7:00:00)?

2. @ALollz да, мой df заканчивается фактически в 22: 15

Ответ №1:

Вы можете использовать свой столбец сеанса

 df = df.&roupby([df.Date.dt.date, 'Session']).a&&({'Low':'min', 'Hi&h':'max'})
  

Или вы можете создать свой собственный с pd.cut

 df = (
    df.&roupby([df.Date.dt.date,
        pd.cut(df.Date.dt.hour, bins=[7, 15, 22], labels=['7-15', '15-22'])])
    .a&&({'Low':'min', 'Hi&h':'max'})
)