Ich habe folgende Datenrahmen:Conditional Verfüllung von Pandas Spalten
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
hier der Code, es zu bauen:
>>> 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']
für jede ID-Gruppe die Statusspalte eine Aufgabe darstellt, die sein kann:
STARTED, INPROGRESS oder ENDED
in dieser genauen Zeitfolge (STARTED sollte Nr t kam nach ENDED etc ..).
Durch die Gruppierung von ID und die Sortierung nach Datum, das ich für ID erhalten 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
Nein ich brauchen würde, um den Status Spalte auf „FIX“ die Reihenfolge oben auf der Grundlage der letzten Status definiert zu folgen. Für die ID 3 den letzten Zustand gestartet, so sollte alles auf den gestarteten Status wie folgt zu verfüllen:
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
für 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
ich würde am Ende des letzten zwei Status INPROGRESS mit und Lassen Sie die erste als STARTED wie:
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 hat die richtige Reihenfolge.
Irgendeine Idee, wie kann ich das mit Pandas tun? Ich versuche durch Gruppierung nach ID und ich denke über Backfill nach dem letzten Status nach, aber ich weiß nicht, wie ich im richtigen Moment die Verfüllung stoppen könnte.
danke!