假设我有这样的数据,
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
有人可以帮我做这件事吗?谢谢
最佳答案
试试这个:
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
关于python - 对日期进行排序并分配排名 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36096311/