pandas 实现 sql 中的row_number,dense_rank,rank

来源:互联网 发布:ubuntu极点五笔安装 编辑:程序博客网 时间:2024/04/28 18:59
  1. data
df=pd.DataFrame({'Year':[2012,2013,2013,2014],'Value':[10,20,25,30]})---------------------------------df   Value  Year0     10  20121     20  20132     25  20133     30  2014

2.实现row_number的排名

df['sort_num']=df['Year'].rank(ascending=0,method='first').astype(int)--ascending 正序-1,逆序-0df   Value  Year  sort_num0     10  2012         41     20  2013         22     25  2013         33     30  2014         1

3.实现 rank 的排名

df['sort_num']=df['Year'].rank(ascending=0,method='min')df   Value  Year  sort_num0     10  2012         41     20  2013         22     25  2013         23     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_num0     10  2012       3.01     20  2013       2.02     25  2013       2.03     30  2014       1.0

5.分组排序

这块没有什么好说的,无非就是 groupby 之后 加上各种rank例子:df['sort_num']=df.groupby['Year'].Value.rank(ascending=1,method='dense')----------------------------df   Value  Year  sort_num0     10  2012       1.01     20  2013       1.02     25  2013       2.03     30  2014       1.0