合并具有相同时间戳的多行并将值放入新列
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
假设我的输入 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