Ограничить столбец временной метки между двумя длительностями в python? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть следующий фрейм данных.

df = {'location_id': [1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5],
      'timestamp':['2020-05-26 06:00:00','2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', 
                 '2020-05-26 10:00:00','2020-05-26 11:00:00','2020-05-26 12:00:00', '2020-05-26 13:00:00',
                 '2020-05-26 06:00:00','2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', 
                 '2020-05-26 10:00:00','2020-05-26 11:00:00','2020-05-26 12:00:00', '2020-05-26 13:00:00',
                 '2020-05-26 06:00:00','2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', 
                 '2020-05-26 10:00:00','2020-05-26 11:00:00','2020-05-26 12:00:00', '2020-05-26 13:00:00',
                 '2020-05-26 06:00:00','2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', 
                 '2020-05-26 10:00:00','2020-05-26 11:00:00','2020-05-26 12:00:00', '2020-05-26 13:00:00',
                 '2020-05-26 06:00:00','2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', 
                 '2020-05-26 10:00:00','2020-05-26 11:00:00','2020-05-26 12:00:00', '2020-05-26 13:00:00']
     }
dataframe = pd.DataFrame(df)

Каждый location_id имеет временную метку с 06:00:00 2020-05-06 до 13:00:00 26.05.2020. Я пытаюсь ограничить временную метку каждого location_id, чтобы все идентификаторы имели временную метку только между 07:00:00 и 10: 00: 00.

Окончательный фрейм данных должен быть следующим:

df = {'location_id': [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5],
      'timestamp':['2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', '2020-05-26 10:00:00',
                   '2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', '2020-05-26 10:00:00',
                   '2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', '2020-05-26 10:00:00',
                   '2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', '2020-05-26 10:00:00',
                   '2020-05-26 07:00:00','2020-05-26 08:00:00', '2020-05-26 09:00:00', '2020-05-26 10:00:00']
     }
dataframe = pd.DataFrame(df)

До сих пор я пробовал следующее:

dataframe[(dataframe['timestamp'] >= '2020-05-26 07:00:00') & (dataframe['timestamp'] <= '2020-05-26 10:00:00')]

В этом примере это работает, но при применении его к большому набору данных он не дает мне правильного ответа. Я попытался отсортировать значения на основе location_id и timestamp, а затем применил то же условие, но оно все равно не сработало. Всегда используется весь фрейм данных. Как этого добиться? Обратите внимание, что это был пример, взятый из очень большого набора данных (13000000 строк и 2 столбца, а реальная временная метка находится между 2020-05-26 00:00:00 до 2020-07-05 23:00:00 для каждого location_id) . Я был бы очень признателен, если бы кто-нибудь мог дать мне решение :)!

1 Ответ

0 голосов
/ 03 августа 2020

set_index в столбце времени и используйте between_time:

df = pd.DataFrame(df)

df["timestamp"] = pd.to_datetime(df["timestamp"])

print (df.set_index("timestamp").between_time("07:00","11:00"))

                     location_id
timestamp                       
2020-05-26 07:00:00            1
2020-05-26 08:00:00            1
2020-05-26 09:00:00            1
2020-05-26 10:00:00            1
2020-05-26 11:00:00            1
2020-05-26 07:00:00            2
2020-05-26 08:00:00            2
2020-05-26 09:00:00            2
2020-05-26 10:00:00            2
2020-05-26 11:00:00            2
2020-05-26 07:00:00            3
2020-05-26 08:00:00            3
2020-05-26 09:00:00            3
2020-05-26 10:00:00            3
2020-05-26 11:00:00            3
2020-05-26 07:00:00            4
2020-05-26 08:00:00            4
2020-05-26 09:00:00            4
2020-05-26 10:00:00            4
2020-05-26 11:00:00            4
2020-05-26 07:00:00            5
2020-05-26 08:00:00            5
2020-05-26 09:00:00            5
2020-05-26 10:00:00            5
2020-05-26 11:00:00            5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...