Учитывая следующую базу данных:
import pandas as pd
from time import strptime
data = {'num': ['B', 'A', 'B', 'A', 'B', 'A', 'B', 'C', 'B', 'A', 'C', 'B'],
'dir': ['IN', 'IN', 'PASS', 'PASS', 'PASS', 'PASS', 'OUT', 'IN', 'IN', 'OUT', 'OUT', 'OUT'],
'empty': [True, False, True, False, True, False, True, False, False, False, False, False],
'station': [100, 1, 20, 20, 14, 14, 5, 65, 89, 8, 66, 11],
'time': [strptime('20180115 00:25', '%Y%m%d %H:%M'),
strptime('20180115 00:30', '%Y%m%d %H:%M'),
strptime('20180115 01:10', '%Y%m%d %H:%M'),
strptime('20180115 01:10', '%Y%m%d %H:%M'),
strptime('20180115 02:10', '%Y%m%d %H:%M'),
strptime('20180115 02:10', '%Y%m%d %H:%M'),
strptime('20180115 03:33', '%Y%m%d %H:%M'),
strptime('20180115 03:33', '%Y%m%d %H:%M'),
strptime('20180115 03:34', '%Y%m%d %H:%M'),
strptime('20180115 04:10', '%Y%m%d %H:%M'),
strptime('20180115 04:11', '%Y%m%d %H:%M'),
strptime('20180115 10:10', '%Y%m%d %H:%M')]}
df = pd.DataFrame.from_dict(data)
Я должен сгенерировать список следующего ожидаемого результата:
num empty station_from station_to time_from time_to
0 B True 100 5 20180115 00:25 20180115 03:33
1 A False 1 8 20180115 00:30 20180115 04:10
2 C False 65 66 20180115 03:33 20180115 04:11
3 B False 89 11 20180115 03:34 20180115 10:10
Объяснение: Это железнодорожные вагоны, в которых каждый вагон идентифицированnum (т. е. A, B, C). Они могут быть либо заряженными, либо пустыми (столбец пустой). Столбец dir указывает, выбрали ли мы эту конкретную машину или бросили ее.Может быть много других состояний (например, PASS в этом примере), но нас интересуют только состояния IN и OUT. Столбец станции - это место, где произошло событие, а столбец времени - когда оно произошло.
Я должен сгруппировать данные между каждой парой IN и OUT (или показать дорожку каждой из них) и показать, где и когда происходили действия. Сложность в том, что это не «нормальная» группа, а своего родаиерархического, основанного на временных рядах (в один и тот же день автомобиль может быть загружен и опустошен несколько раз).
Я не знаю, является ли панда лучшей структурой для этого упражнения, но существуют сотни миллионовзаписи в БД и производительность критичны.(мы предварительно выбираем данные на основе определенного периода времени)
Как достичь ожидаемого результата?