Строки из pandas кадра данных между двумя значениями времени - PullRequest
1 голос
/ 27 марта 2020

У меня есть такой pandas фрейм данных (с меткой времени, преобразованной в объект datetime):

    id  timestamp
0   221 2020-11-07 12:02:00
1   223 2020-11-08 13:21:00
2   224 2020-11-09 12:50:00
3   225 2020-11-10 14:23:00
4   226 2020-11-11 12:25:00
5   227 2020-11-14 14:26:00

Я хочу найти количество строк между временным интервалом. например, 12: 00-13: 00, здесь будет 3 (записи 0, 2 и 4)

Ответы [ 4 ]

1 голос
/ 27 марта 2020

Итак, как я уже прокомментировал, я думаю, что вы можете просто использовать функцию between_time:

CountRows = df.set_index('timestamp').between_time('12:00','13:00').shape[0]

Это, в вашем случае, устанавливает столбец timestamp в качестве индекса, а затем возвращает количество строк между двумя значениями времени. Где:

"Первый элемент кортежа, возвращаемый Dataframe.shape, содержит количество элементов в индексе в кадре данных, т.е. в основном количество строк в кадре данных. Источник

1 голос
/ 27 марта 2020

Пожалуйста, попробуйте

Привести временную метку к дате и отсортировать по возрастанию

  df['timestamp']=pd.to_datetime(df['timestamp']).sort_values(ascending=True)

Сбросить индекс, но не сбрасывать, чтобы сохранить идентификатор

df.reset_index(drop=False, inplace=True)

Установить метку времени как новый индекс разрешить использование df.betweeen time

df.set_index(df['timestamp'], inplace=True)
df.between_time('12:00', '13:00')
1 голос
/ 27 марта 2020

Так как я полагаю, что предложенный Между_тайм работает только для DatetimeIndex, вы можете либо установить DataFrame index на 'timestamp', а затем использовать between_time или, альтернативно, сначала использовать сортировка

df.sort_values(by='timestamp',axis='columns',inplace=True)

Затем используйте сортированный поиск

start = df['timestamp'].searchsorted(pd.Timestamp('2020-11-07 12:00:00'), side='left')
end = df['timestamp'].searchsorted(pd.Timestamp('2020-11-07 13:00:00'), side='right')

Затем найдите количество строк

count = start - end
0 голосов
/ 27 марта 2020

Как следует из сообщений в разделе комментариев Между_тем работает хорошо. Нужно сначала сделать метку времени (которая здесь является объектом datetime64) индексом, а затем использовать функциюween_time.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...