У меня есть следующий dataframe:Условный засыпки колонн панд
DATE ID STATUS
0 2014-01-01 1 INPROGRESS
1 2013-03-01 1 ENDED
2 2015-05-01 2 INPROGRESS
3 2012-05-01 1 STARTED
4 2011-05-01 2 STARTED
5 2011-03-01 3 STARTED
6 2011-04-01 3 ENDED
7 2011-06-01 3 INPROGRESS
8 2011-09-01 3 STARTED
здесь код, чтобы построить его:
>>> df1 = pd.DataFrame(columns=["DATE", "ID", "STATUS"])
>>> df1["DATE"] = ['2014-01-01', '2013-03-01', '2015-05-01', '2012-05-01', '2011-05-01', '2011-03-01', '2011-04-01', '2011-06-01', '2011-09-01']
>>> df1["ID"] = [1,1,2,1,2,3,3,3,3]
>>> df1["STATUS"] = ['INPROGRESS', 'ENDED', 'INPROGRESS', 'STARTED', 'STARTED', 'STARTED','ENDED', 'INPROGRESS', 'STARTED']
для каждой группы идентификаторов столбец состояния представляет собой задачу, которая может быть:
НАЧАЛО, ИНТЕРЕСНО ИЛИ ЗАКРЫТЬ
в этом точном срочном заказе (НАЧАЛО не должно пришел после ENDED и т.п ..). не
Группировка по идентификатору и сортировать по дате я получаю по ID 3:
df1.sort_values('DATE')[df1['ID']==3]
DATE ID STATUS
5 2011-03-01 3 STARTED
6 2011-04-01 3 ENDED
7 2011-06-01 3 INPROGRESS
8 2011-09-01 3 STARTED
Нет, я бы нужно «FIX» столбец статуса, чтобы следовать в порядке, установленном выше на основе последнего статуса. Для ID 3 запускается, так что все должно быть засыпаны в запущенном состоянии, как следовать за последним статус:
DATE ID STATUS
5 2011-03-01 3 STARTED
6 2011-04-01 3 STARTED
7 2011-06-01 3 STARTED
8 2011-09-01 3 STARTED
Для ID 1:
df1.sort_values('DATE')[df1['ID']==1]
DATE ID STATUS
3 2012-05-01 1 STARTED
1 2013-03-01 1 ENDED
0 2014-01-01 1 INPROGRESS
я бы в конечном итоге, последние два состояния INPROGRESS и оставьте первый, как НАЧАЛО, как:
df1.sort_values('DATE')[df1['ID']==1]
DATE ID STATUS
3 2012-05-01 1 STARTED
1 2013-03-01 1 INPROGRESS
0 2014-01-01 1 INPROGRESS
ID 2 имеет правильный порядок.
Любая идея, как я могу это сделать с помощью панд? Я пытаюсь группировать по ID, и я думаю о обратной засыпке, основываясь на последнем статусе, но я не знаю, как я мог бы остановить залив в нужный момент.
спасибо!