Ich habe wie so eine Liste von Datensätzen in einem Datenrahmen unter Verwendung ableiten:Wie kann ich ein Enddatum in einem Pandas Datenrahmen loc
für1 stehen
Die Codes in update_code:
zum Inventar Update5: aus dem Inventar entfernt.
Date id amount update_code
20170101 Apple 39 1
20170102 Pears 21 1
20170105 Apple 13 1
20170227 Pears 5
Ich bin auf der Suche nach einer Spalte mit einem Datumsbereich für jeden Datensatz erstellen. Zum Beispiel sollte die Ausgabe wie folgt aussehen:
Date id amount update_code end_date
20170101 Apple 39 1 20170104
20170102 Pears 21 1 20170226
20170105 Apple 13 1 29990909
20170227 Pears 5 20170227
Jedes Datum und Aufzeichnung sollte 1 Tag vor der nächsten Änderung des Datenrahmens beenden. Die erste Aufzeichnung von "Apple" ist vom 01/01/2017 bis zum 01/04/2017, da es am 01/05/2017 einen neuen "Apple" -Rekord gibt.
Ich habe versucht, dies mit df loc, aber Probleme mit der Isolierung jeder ID.
bisher Mein Code ist folgende (die nur das Enddatum folgert, wenn die update_code 5):
def end_date(df):
df['end_date'] = ''
df.loc[df['update'].isin([5]), 'endDate'] = df.Date
return df
Ich kann immer noch nicht herausfinden, wie die Folgern das Endes jeden Datensatz den anderen Teil zu tun und die Daten anfügen. Vielen Dank!
Das ist perfekt, vielen Dank! – staten12
Schöne Lösung ++. 'df.groupby()' sortiert Gruppenschlüssel standardmäßig, so dass ich denke, wir können es ein wenig vereinfachen: 'df.groupby ('id') .Datum.Anwendung (Lambda x: x.shift (-1) - pd .Timedelta (1)) ' – MaxU