如何在pyspark中转置数据框?
How to transpose a dataframe in pyspark?
如何在 Pyspark 中转置列?我想让列变成行,行变成列。
这是输入:
+---- +------+-----+-----+
|idx | vin |cur | mean|
+---- +------+-----+-----+
|Type1| D| 5.0 |6.0 |
|Type2| C| null| 7.0 |
+---- +------+-----+-----+
预期结果:
+---- +------+-----+
|idx |Type1 |Type2|
+---- +------+-----+
|vin | D | C |
|cur | 5.0 | null|
|mean | 6.0 | 7.0 |
+-----+------+-----+
您可以组合 stack
函数来逆透视 vin
、mean
和 cur
列然后 pivot
列 idx
:
from pyspark.sql import functions as F
df1 = df.selectExpr("idx", "stack(3, 'vin',vin, 'cur',cur, 'mean',mean)") \
.select("idx", "col0", "col1") \
.groupBy("col0") \
.pivot("idx").agg(F.first("col1")) \
.withColumnRenamed("col0", "idx")
df1.show(truncate=False)
#+----+-----+-----+
#|idx |Type1|Type2|
#+----+-----+-----+
#|vin |D |C |
#|mean|6.0 |7.0 |
#|cur |5.0 |null |
#+----+-----+-----+
您一个一个地应用转换,看看它是如何工作的以及每个部分的作用。
如何在 Pyspark 中转置列?我想让列变成行,行变成列。
这是输入:
+---- +------+-----+-----+
|idx | vin |cur | mean|
+---- +------+-----+-----+
|Type1| D| 5.0 |6.0 |
|Type2| C| null| 7.0 |
+---- +------+-----+-----+
预期结果:
+---- +------+-----+
|idx |Type1 |Type2|
+---- +------+-----+
|vin | D | C |
|cur | 5.0 | null|
|mean | 6.0 | 7.0 |
+-----+------+-----+
您可以组合 stack
函数来逆透视 vin
、mean
和 cur
列然后 pivot
列 idx
:
from pyspark.sql import functions as F
df1 = df.selectExpr("idx", "stack(3, 'vin',vin, 'cur',cur, 'mean',mean)") \
.select("idx", "col0", "col1") \
.groupBy("col0") \
.pivot("idx").agg(F.first("col1")) \
.withColumnRenamed("col0", "idx")
df1.show(truncate=False)
#+----+-----+-----+
#|idx |Type1|Type2|
#+----+-----+-----+
#|vin |D |C |
#|mean|6.0 |7.0 |
#|cur |5.0 |null |
#+----+-----+-----+
您一个一个地应用转换,看看它是如何工作的以及每个部分的作用。