- data
df=pd.DataFrame({'Year':[2012,2013,2013,2014],'Value':[10,20,25,30]})
---------------------------------
df
Value Year
0 10 2012
1 20 2013
2 25 2013
3 30 2014
2.实现row_number的排名
df['sort_num']=df['Year'].rank(ascending=0,method='first').astype(int)--ascending 正序-1,逆序-0
df
Value Year sort_num
0 10 2012 4
1 20 2013 2
2 25 2013 3
3 30 2014 1
3.实现 rank 的排名
df['sort_num']=df['Year'].rank(ascending=0,method='min')
df
Value Year sort_num
0 10 2012 4
1 20 2013 2
2 25 2013 2
3 30 2014 1
4.实现dense_rank的排名
%timeit df['sort_num']=df['Year'].rank(ascending=1,method='dense')--rank 的方法
%timeit df['sort_num'] = df.Year.astype('category').cat.codes + 1--category类型的特性(默认正序)
%timeit df['sort_num'] = pd.factorize(df.Year)[0] + 1--变成因子(默认正序)
3个方法 执行时间上还是会有小差异的,数据量小,不做示范
---------------------
df
Value Year sort_num
0 10 2012 3.0
1 20 2013 2.0
2 25 2013 2.0
3 30 2014 1.0
5.分组排序
这块没有什么好说的,无非就是 groupby 之后 加上各种rank
例子:
df['sort_num']=df.groupby['Year'].Value.rank(ascending=1,method='dense')
----------------------------
df
Value Year sort_num
0 10 2012 1.0
1 20 2013 1.0
2 25 2013 2.0
3 30 2014 1.0