假设我有像
这样的数据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
有人可以帮我这么做吗?感谢
答案 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