Обратите внимание, что я не знаю правильного имени для операции, которую хочу выполнить, и поэтому я попытаюсь объяснить на примере:
У меня есть такой фрейм данных:
sample_sf = pd.DataFrame({
'time':[101, 104, 112, 120, 120, 134, 202, 215, 222, 255, 258, 272, 290, 294, 294, 305, 305, 307, 504, 520, 527, 538, 557, 557],
'status':[1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0],
'opponent_id':[1, 2, 1, 2, 3, 3, 2,2,2,2,4,4,2,3, 5, 3, 5, 2, 6,3, 6, 6, 3,6]})
Это отслеживает, видит ли меня оппонент или нет. Status = 1
указывает, что противник с данным идентификатором нашел меня, тогда как status = 0 указывает, что данный противник потерял меня. Следовательно, первая строка моего фрейма данных указывает, что противник номер 1 нашел меня в момент времени 101. Вторая строка означает, что 2-й противник нашел меня в момент времени 104, третья строка означает, что противник 1 потерял меня в момент времени 112, а 4-й раунд означает, что противник номер 2 потерял меня в момент 120.
Когда ни один противник меня не видит, я невидим (состояние 0), и когда хотя бы один противник видит меня, я видим (состояние 1). Я хотел бы выяснить, когда и когда я был невидимым, а когда и когда стал видимым. Где последний наблюдаемый статус должен длиться до конца игры (время = 900). Поэтому мне нужен следующий фрейм данных:
out = pd.DataFrame({'from':[0, 101, 134, 202, 215, 222,255, 258, 272, 290, 307,504,557], 'to':[100, 133, 201, 214, 221, 254, 257, 271,289,306,503,556,900], 'status':[0, 1, 0, 1, 0, 1,0,1,0, 1,9,1,0]})
, который выглядит так:
from to status
0 0 100 0
1 101 133 1
2 134 201 0
3 202 214 1
4 215 221 0
5 222 254 1
6 255 257 0
7 258 271 1
8 272 289 0
9 290 306 1
10 307 503 9
11 504 556 1
12 557 900 0