Ich habe einen Datenrahmen von Mitarbeiter Gehaltsdaten (Probe wie folgt), in dem ‚Datum‘ bezieht sich auf, wenn das Gehalt des Mitarbeiters wirksam geworden:Pandas groupby + Resampling/TimeGrouper für Veränderungen über Monate von Anfang
Employee Date Salary
PersonA 1/1/2016 $50000
PersonB 3/5/2014 $65000
PersonB 3/1/2015 $75000
PersonB 3/1/2016 $100000
PersonC 5/15/2010 $75000
PersonC 6/3/2011 $100000
PersonC 3/10/2012 $110000
PersonC 9/5/2012 $130000
PersonC 3/1/2013 $150000
PersonC 3/1/2014 $200000
In dieser Beispiel: PersonA startete in diesem Jahr bei $ 50.000 und PersonC ist seit einiger Zeit bei der Firma und hat seit seinem Start am 15.05.2010 mehrere Erhöhungen erhalten.
Ich brauche die Date
Spalte Months from Start
, auf einen einzelnen Mitarbeiter Basis zu konvertieren, wo Months from Start
in Schritten von m
Monate sein wird (von mir angegeben). Zum Beispiel für personB, unter der Annahme, m=12
, wäre das Ergebnis:
Employee Months From Start Salary
PersonB 0 $65000
PersonB 12 $65000
PersonB 24 $75000
Dies bedeutet, dass im Monat 0 (Arbeitsbeginn), personB ein Gehalt von $ 65.000 hatte; 12 Monate später betrug sein Gehalt $ 65.000, und 24 Monate später betrug sein Gehalt $ 75.000. Beachten Sie, dass das nächste Inkrement (36 Monate) NICHT auf dem transformierten Datenrahmen für PersonB erscheinen würde, da diese Dauer die Dauer der Beschäftigung von PersonB überschreitet (es wäre in der Zukunft).
Beachten Sie noch einmal, dass ich m
zu jedem Monatsinkrement anpassen kann. Wenn ich Schritten von 6 Monaten (m=6
) wollte, wäre das Ergebnis:
Employee Months From Start Salary
PersonB 0 $65000
PersonB 6 $65000
PersonB 12 $65000
PersonB 18 $75000
PersonB 24 $100000
PersonB 30 $100000
Als letzten Schritt, würde ich auch Gehalt des Mitarbeiters ab heute sind gerne auf dem transformierten Datenrahmen. Mit personB wieder und m=6
unter der Annahme, bedeutet dies, dass die Ergebnisse sein würden:
Employee Months From Start Salary
PersonB 0 $65000
PersonB 6 $65000
PersonB 12 $65000
PersonB 18 $75000
PersonB 24 $100000
PersonB 30 $100000
PersonB 32.92 $100000 <--added (today is 32.92 months from start)
Frage: gibt es eine programmatische Art und Weise (ich nehme an zumindest über einen Link: groupby
, resample
oder TimeGrouper
) zu erreichen, der oben beschriebene gewünschte Datenrahmen?
Hinweis: Sie können davon ausgehen, dass alle Mitarbeiter aktiv sind (das Unternehmen nicht verlassen haben).
Danke für die Hinweise. Ein Problem, auf das ich gestoßen bin, ist, dass einige Angestellte im vollen Datensatz am selben Tag ihre Gehälter in Kraft setzen. Das Setzen von "index" auf "df.Date" verstößt also gegen die eindeutige Indexanforderung, die "resample" anscheinend will (ich erhalte diese) Fehler: 'ValueError: kann von einer doppelten Achse nicht neu indizieren'). Lass es mich wissen, wenn du Ideen hast. – NickBraunagel