如何根据列中的一组行对数据框进行排名?
Posted
技术标签:
【中文标题】如何根据列中的一组行对数据框进行排名?【英文标题】:How to rank dataframe depending on a group of rows in a column? 【发布时间】:2021-01-15 16:47:43 【问题描述】:我有这个数据框:
+-----+----------+---------+
|num |Timestamp |frequency|
+-----+----------+---------+
|20.0 |1632899456|4 |
|20.0 |1632901256|4 |
|20.0 |1632901796|4 |
|20.0 |1632899155|4 |
|10.0 |1632901743|2 |
|10.0 |1632899933|2 |
|91.0 |1632899756|1 |
|32.0 |1632900776|1 |
|41.0 |1632900176|1 |
+-----+----------+---------+
我想添加一个包含每个频率排名的列。新的数据框是这样的:
+-----+----------+---------+------------+
|num |Timestamp |frequency|rank |
+-----+----------+---------+------------+
|20.0 |1632899456|4 |1 |
|20.0 |1632901256|4 |1 |
|20.0 |1632901796|4 |1 |
|20.0 |1632899155|4 |1 |
|10.0 |1632901743|2 |2 |
|10.0 |1632899933|2 |2 |
|91.0 |1632899756|1 |3 |
|32.0 |1632900776|1 |3 |
|41.0 |1632900176|1 |3 |
+-----+----------+---------+------------+
我使用的是 Spark 版本 2.4.3 和 SQLContext,以及 scala 语言。
【问题讨论】:
【参考方案1】:你可以使用dense_rank
:
import org.apache.spark.sql.expressions.Window
val df2 = df.withColumn("rank", dense_rank().over(Window.orderBy(desc("frequency")))
【讨论】:
以上是关于如何根据列中的一组行对数据框进行排名?的主要内容,如果未能解决你的问题,请参考以下文章