排序日期并分配排名 - python

时间:2016-03-19 00:14:48

标签: python sorting

假设我有像

这样的数据
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

我想根据每个用户的日期对行进行排序,然后创建一个新列,为每个日期分配1-5个等级。

以下是试用,

df.groupby(['user']).sort_values(['date'])用于对每个用户的日期进行排序。但我想创建一个新的列,它将在排序后排名。

我理想的输出是,

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

有人可以帮我这么做吗?感谢

1 个答案:

答案 0 :(得分:2)

试试这个:

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