如何将特定列更改为行标题并在 pySpark 中制作矩阵?
How to change the a particular column as a row heading and make a matrix in pySpark?
我的数据框示例如下。
id
Header One
value
total
1
A
10
30
1
B
5
40
2
A
12
50
2
B
5
60
3
A
14
70
3
B
10
80
我想将其转换为一个矩阵,其中行对应于不同的 id,列对应于不同的 Header,矩阵的条目是总值。行应命名为 1、2、3,列应命名为 A、B。因此,一个 3x2 矩阵的条目作为总值。我该怎么做?
结果输出应该如下,
A
B
1
30
40
2
50
60
3
70
80
我尝试删除列并单独考虑条目,但没有成功。
结果输出应该如下,
A
B
1
30
40
2
50
60
3
70
80
这是一个典型的row-to-column问题,使用sparkpivot
函数实现
df = df.groupBy('id').pivot('Header One').agg(F.sum('total'))
df.show(truncate=False)
我的数据框示例如下。
id | Header One | value | total |
---|---|---|---|
1 | A | 10 | 30 |
1 | B | 5 | 40 |
2 | A | 12 | 50 |
2 | B | 5 | 60 |
3 | A | 14 | 70 |
3 | B | 10 | 80 |
我想将其转换为一个矩阵,其中行对应于不同的 id,列对应于不同的 Header,矩阵的条目是总值。行应命名为 1、2、3,列应命名为 A、B。因此,一个 3x2 矩阵的条目作为总值。我该怎么做?
结果输出应该如下,
A | B | |
---|---|---|
1 | 30 | 40 |
2 | 50 | 60 |
3 | 70 | 80 |
我尝试删除列并单独考虑条目,但没有成功。
结果输出应该如下,
A | B | |
---|---|---|
1 | 30 | 40 |
2 | 50 | 60 |
3 | 70 | 80 |
这是一个典型的row-to-column问题,使用sparkpivot
函数实现
df = df.groupBy('id').pivot('Header One').agg(F.sum('total'))
df.show(truncate=False)