У меня есть DataFrame, такой как этот:
Код: Выделить всё
tid datetime event data
0 0 2017-03-22 10:59:59.864 START NaN
1 0 2017-03-22 10:59:59.931 END NaN
2 0 2017-03-22 10:59:59.935 START NaN
3 1 2017-03-22 10:59:59.939 END NaN
4 0 2017-03-22 10:59:59.940 END NaN
5 1 2017-03-22 10:59:59.941 START NaN
6 1 2017-03-22 10:59:59.945 END NaN
7 0 2017-03-22 10:59:59.947 START NaN
8 1 2017-03-22 10:59:59.955 START NaN
Моя текущая проблема заключается в том, что мой исходный фрейм данных может пропустить первое событие START для каждого потока (в моем примере выше строка с индексом 3 является событием END без предыдущего START). Мне нужно удалить эти КОНЕЧНЫЕ строки, но я не знаю, как это сделать.
Та же проблема с последними НАЧАЛЬНЫМИ строками, у которых нет соответствующей КОНЕЧНОЙ строки.
Пример ввода
Код: Выделить всё
import pandas as pd
import io
df = pd.read_csv(io.StringIO('''tid;datetime;event
0;2017-03-22 10:59:59.864;START
0;2017-03-22 10:59:59.931;END
0;2017-03-22 10:59:59.935;START
1;2017-03-22 10:59:59.939;END
0;2017-03-22 10:59:59.940;END
1;2017-03-22 10:59:59.941;START
1;2017-03-22 10:59:59.945;END
0;2017-03-22 10:59:59.947;START
1;2017-03-22 10:59:59.955;START'''), sep=';', parse_dates=['datetime'])
Тот же кадр данных, но с опущенной строкой №2, поскольку это первая строка для Tid 1 и не является мероприятием СТАРТ:
Код: Выделить всё
tid datetime event
0 0 2017-03-22 10:59:59.864 START
1 0 2017-03-22 10:59:59.931 END
3 1 2017-03-22 10:59:59.933 START
4 1 2017-03-22 10:59:59.945 END
5 0 2017-03-22 10:59:59.947 START
6 0 2017-03-22 10:59:59.955 END
Код: Выделить всё
tid start_datetime stop_datetime
0 0 2017-03-22 10:59:59.864 2017-03-22 10:59:59.931
1 1 2017-03-22 10:59:59.933 2017-03-22 10:59:59.945
2 0 2017-03-22 10:59:59.947 2017-03-22 10:59:59.955
Код: Выделить всё
df.sort(['tid', 'datetime']).groupby('tid').first().event == 'END'
Подробнее здесь: https://stackoverflow.com/questions/436 ... each-group