2016-09-27 8 views
2

Ich habe ein Datenrahmen, der wie folgt aussieht:Ersetzen Datenrahmen Reihen mit neuesten Daten basierend auf Schlüssel

user_id  val  date 
1   10   2015-02-01 
1   11   2015-01-01 
2   12   2015-03-01 
2   13   2015-02-01 
3   14   2015-03-01 
3   15   2015-04-01 

Ich brauche eine Funktion auszuführen, die (sagen wir mal) die Summe von vals chronologisch durch die Tage berechnet. Wenn ein Benutzer ein jüngeres Datum hat, verwenden Sie dieses Datum, wenn nicht, behalten Sie das ältere Datum bei.

Zum Beispiel. Wenn ich die Funktion mit dem Datum 2015.03.15 laufe, dann wird die Tabelle sein:

user_id  val  date 
1   10   2015-02-01 
2   12   2015-03-01 
3   14   2015-03-01 

mir gibt eine Summe von 36

Wenn ich die Funktion mit dem Zeitpunkt der 2015-04- 15, dann ist die Tabelle:

user_id  val  date 
1   10   2015-02-01 
2   12   2015-03-01 
3   15   2015-04-01 

(Zeile 3 von Benutzer 3 wurde durch ein jüngeres Datum ersetzt).

Ich weiß, dass dies ziemlich esoterisch, aber dachte ich, das aus euch alle hüpfen konnte, wie ich dies eine einfache Art und Weise zu denken, zu tun versucht haben ..

Antwort

2

try this:

In [36]: df.loc[df.date <= '2015-03-15'] 
Out[36]: 
    user_id val  date 
0  1 10 2015-02-01 
1  1 11 2015-01-01 
2  2 12 2015-03-01 
3  2 13 2015-02-01 
4  3 14 2015-03-01 

In [39]: df.loc[df.date <= '2015-03-15'].sort_values('date').groupby('user_id').agg({'date':'last', 'val':'last'}).reset_index() 
Out[39]: 
    user_id  date val 
0  1 2015-02-01 10 
1  2 2015-03-01 12 
2  3 2015-03-01 14 

oder:

In [40]: df.loc[df.date <= '2015-03-15'].sort_values('date').groupby('user_id').last().reset_index() 
Out[40]: 
    user_id val  date 
0  1 10 2015-02-01 
1  2 12 2015-03-01 
2  3 14 2015-03-01 

In [41]: df.loc[df.date <= '2015-04-15'].sort_values('date').groupby('user_id').last().reset_index() 
Out[41]: 
    user_id val  date 
0  1 10 2015-02-01 
1  2 12 2015-03-01 
2  3 15 2015-04-01 
+0

perfekt. Vielen Dank! – eljusticiero67

+0

@ eljusticiero67, Sie sind willkommen. :) – MaxU

Verwandte Themen