合并具有相同时间戳的多行并将值放入新列

Combine multiple rows with the same timestamp and put values into new columns

假设我的输入 df 如下所示:

Timestamp name value
14:00:00 A 25
14:00:00 B 24
15:00:00 A 20
15:00:00 C 21
16:00:00 A 20
16:00:00 B 22
16:00:00 C 23
16:00:00 D 24

我现在想做的是合并依赖于时间戳的行,但是在合并时将具有相应值的名称放入新列中以实现以下目的:

Timestamp A B C D
14:00:00 25 24 nan nan
15:00:00 20 nan 21 nan
16:00:00 20 22 23 24

我可以使用 Pyspark 的一些内置函数来实现此目的吗?如果该方法尽可能通用,那就太好了。

您只需要 pivot 在 pyspark 中,您可以使用 pivot 实现如下所示的旋转

df = spark.createDataFrame(
[('14:00:00','A',25),
('14:00:00','B',24),
('15:00:00','A',20),
('15:00:00','C',21),
('16:00:00','A',20),
('16:00:00','B',22),
('16:00:00','C',23),
('16:00:00','D',24)],("Timestamp", "name", "value"))


df1 = df.groupBy("Timestamp").pivot("name").sum("value")

df1.show() # this should display the expected results