2016-03-19 8 views
1

nehme ich an Daten, wie haben,Sortieren Sie die Daten und einen Rang zuweisen - Python

user date 
1 3/18/2016 
1 1/11/2015 
1 1/11/2015 
1 5/8/2015 
1 7/8/2015 
2 3/17/2016 
2 2/10/2015 
2 9/8/2015 
2 1/1/2016 
2 1/1/2016 

Ich möchte die Zeilen auf die Termine für die einzelnen Benutzer sortieren und dann eine neue Spalte erstellen, die 1- zuweisen würde, 5 Rang für jedes Datum.

Die Folgenden werden tryings,

df.groupby(['user']).sort_values(['date']) für jeden Benutzer für die Daten zu sortieren. Aber ich möchte eine neue Spalte erstellen, die nach dem Sortieren rangieren würde.

Mein idealer Ausgang wäre,

user date rank 
1 1/11/2015 1 
1 1/11/2015 1 
1 5/8/2015 2 
1 7/8/2015 3 
1 3/18/2016 4 
2 2/10/2015 1 
2 9/8/2015 2 
2 1/1/2016 3 
2 1/1/2016 3 
2 3/17/2016 4 

Kann jemand mir helfen, in dies zu tun? Dank

+0

könnten Sie bitte die Sortierung für 'Benutzer == 1 'in Ihre erwartete Ausgabe erklären? – MaxU

+0

Entschuldigung für die falsche Ausgabe ... Jetzt habe ich es geändert – Observer

Antwort

0

Versuchen Sie folgendes:

In [274]: df['rank'] = df.sort_values(['user','date']) \ 
         .groupby(['user'])['date'] \ 
         .rank(method='min').astype(int) 


In [277]: df.sort_values(['user','date']) 
Out[277]: 
    user  date rank 
1  1 2015-01-11  1 
2  1 2015-01-11  1 
3  1 2015-05-08  3 
4  1 2015-07-08  4 
0  1 2016-03-18  5 
6  2 2015-02-10  1 
7  2 2015-09-08  2 
8  2 2016-01-01  3 
9  2 2016-01-01  3 
5  2 2016-03-17  5 
Verwandte Themen