我有以下數據框:熊貓列的條件回填
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進行分組,我正在考慮基於最後狀態的回填,但我不知道如何在適當的時候停止回填。
謝謝!