我有以下数据框:熊猫列的条件回填
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']
每个ID组状态列表示,可以是一个任务:
STARTED,INPROGRESS或ENDED
以这个精确的时间顺序(STARTED应该是no t在ENDED等后出现)。
通过由ID分组和按日期我获得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
不,我需要“修复”状态栏跟随基础上,最后状态上面定义的顺序。对于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和请以STARTED开头:
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进行分组,我正在考虑基于最后状态的回填,但我不知道如何在适当的时候停止回填。
谢谢!