На более раннюю версию вопроса ответили здесь:
Как векторизовать сравнение в кадре данных панд?
Теперь я добавил новое условие с Machine
:
+---------+-----+-------+---------+
| Machine | nr | Time | Event |
+---------+-----+-------+---------+
| a | 70 | 8 | 1 |
| a | 70 | 0 | 1 |
| b | 70 | 0 | 1 |
| c | 74 | 52 | 1 |
| c | 74 | 12 | 2 |
| c | 74 | 0 | 2 |
+---------+-----+-------+---------+
Я хочу назначить события последнему столбцу. Первая запись каждого Machine
по умолчанию равна 1. То есть, если это новый Machine
, Event
перезапускается с 1.
If Time[i] < 7 and nr[i] != nr[i-1], then Event[i]=Event[i-1]+1.
If Time[i] < 7 and nr[i] = nr[i-1], then Event[i]=Event[i-1]
If Time[i] > 7 then Event[i]=Event[i-1]+1.
Как мне эффективно векторизовать это? Я хочу избежать петель.
Я пытаюсь дополнить существующее решение
m = df.Machine.ne(df.Machine.shift())
o = np.select([t & n, t & ~n, m], [1, 0, 1], 1)
Но это не сбрасывает Event
для нового Machine
на 1, я понял, только увеличивает его. Любые указатели о том, как включить это?