Итак, у меня есть фрейм данных, который имеет:
- Objects;
- Сигналы тревоги;
- Дата и время начала;
- Дата окончания / время;
И выглядит так:
Object | Alarm | Start | End |
obj1 | cell | 2014-01-04 16:07:07| 2014-01-04 16:11:07|
obj1 | loc | 2014-01-04 16:08:07| 2014-01-04 16:09:07|
obj1 | dc | 2014-01-04 16:11:08| 2014-01-04 16:12:07|
obj1 | bat | 2014-01-04 16:12:07| 2014-01-04 16:13:07|
obj2 | cell | 2014-01-04 16:12:07| 2014-01-04 16:15:07|
obj2 | loc | 2014-01-04 16:16:07| 2014-01-04 16:17:07|
obj2 | cell | 2014-01-04 16:17:07| 2014-01-04 16:19:07|
obj2 | bat | 2014-01-04 16:17:07| 2014-01-04 16:18:07|
obj3 | loc | 2014-01-04 16:07:07| 2014-01-04 16:07:07|
obj3 | dc | 2014-01-04 16:07:07| 2014-01-04 16:07:07|
Я хочу удалить все тревоги для каждого объекта, возникшие между началом тревоги ячейки и концом ячейкитревога. Таким образом, результирующий кадр данных должен выглядеть следующим образом:
Object | Alarm | Start | End |
obj1 | dc | 2014-01-04 16:05:07| 2014-01-04 16:06:07|
obj1 | bat | 2014-01-04 16:12:07| 2014-01-04 16:13:07|
obj2 | loc | 2014-01-04 16:16:07| 2014-01-04 16:17:07|
obj3 | loc | 2014-01-04 16:07:07| 2014-01-04 16:07:07|
obj3 | dc | 2014-01-04 16:07:07| 2014-01-04 16:07:07|
Я пытался сделать что-то вроде
for obj in data['Object'].unique():
dt = data[data['Object']==obj]
start = dt[dt['Alarm']=='cell']['Start']
end = dt[dt['Alarm']=='cell']['End']
mask = (dt['Start'] >= start) & (dt['End'] <= end)
dt.loc[~mask]
Однако я получаю сообщение об ошибке плюс, я не могу понять, какполучить результат для всего кадра данных.