0

我很难弄清楚这个

这是一个简单的例子:

+---+----+-----+
| Id|Rank|State+
+---+----+-----+
|  a|   5|  NJ +
|  a|   7|  GA +
|  b|   8|  CA +
|  b|   1|  CA +
+---+----+-----+

我想以一种方式格式化这个数据帧,如果同一个 ID 处于多个状态,让它只存储一个状态。在此示例中,ID 为“a”的任何行都应具有状态“NJ”而不是“NJ”和“GA”。

结果应该是这样的:

+---+----+-----+
| Id|Rank|State+
+---+----+-----+
|  a|   5|  NJ +
|  a|   7|  NJ +
|  b|   8|  CA +
|  b|   1|  CA +
+---+----+-----+`

这怎么可能实现?谢谢!!

4

1 回答 1

1

尝试first窗口功能,如:

w = Window().partitionBy("Id").orderBy("Rank")
df.select(col("Id"), col("Rank"), first("State", True).over(w).alias("NewState"))

这将根据 id 组中的排名将第一个状态放入"NewState"列中。
如果你想使用它,同样的事情可以很容易地用纯 SQL 来表达。

顺便说一句,欢迎来到 StackOverflow 社区!

于 2019-08-29T20:39:23.160 回答