python或pyspark,sql对⼀个dataframe,排序并排名
输⼊:
输出:
具体代码:
⼀:纯python代码
import pandas as pd
data=pd.DataFrame({'c1':[5,8,3,3,4,1]})
print(data)
d1= data.sort_values(by='c1')
d1['rank']=d1.rank(method='min').astype(int)
print(d1)
⼆:pyspark代码
import pandas as pd
from pyspark.sql import Row, functions as F
from pyspark.sql.window import Window
from pyspark import SparkContext
from pyspark.sql import SQLContext
sc = SparkContext()
sqlContext = SQLContext(sc)
df=pd.DataFrame({'c1':[5,8,3,3,4,1]})
sdf = ateDataFrame(df)
(sdf.select("c1",F.rank().derBy("c1")).alias("rank") ).show())
#(sdf.select("c1",F.rank().derBy(sdf.c1.desc())).alias("rank") ).show())#这也可以的
三:sql代码
窗⼝函数语法:其中[]中的内容可以省略,窗⼝函数的适⽤范围:只能在select⼦句中使⽤。
<;窗⼝函数> over ([partition by <;列清单>]order by <;排序⽤列清单>)
rank函数怎么排名窗⼝函数⼤体可以分为以下两种:1.能够作为窗⼝函数的聚合函数(sum,avg,count,max,min)
2.rank,dense_rank。row_number等专⽤窗⼝函数。
语法的基本使⽤⽅法:使⽤rank函数
rank函数是⽤来计算记录排序的函数。
select product_name, product_type, sale_price,
rank () over (partition by product_type
order by sale_price) as ranking
from Product;
partition by 能够设定排序的对象范围,类似于group by语句,这⾥就是以product_type划分排序范围。
order by能够指定哪⼀列,何种顺序进⾏排序。也可以通过asc,desc来指定升序降序。
窗⼝函数兼具分组和排序两种功能。通过partition by分组后的记录集合称为窗⼝。
然⽽partition by不是窗⼝函数所必须的:
select product_name, product_type, sale_price,
rank () over (order by sale_price) as ranking
from Product;
专⽤函数的种类:1.rank函数:计算排序时,如果存在相同位次的记录,则会跳过之后的位次。
2.dense_rank函数:同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论