我有下面的pyspark数据帧
stat col_A col_B col_C col_D
count 14 14 14 14 14
75% 4 4001 160987 49
50% 3 3657 131225 38
我想从75%的行中减去50%的行,并在同一数据帧中添加新行结果,如下所示:
stat col_A col_B col_C col_D
count 14 14 14 14 14
75% 4 4001 160987 49
50% 3 3657 131225 38
result 1 344 26762 11
这并不像人们想象的那么容易,因为需要对行而不是列进行操作。尝试下面的代码,使用union
:再添加一行
import pyspark.sql.functions as F
result = df.union(
df.agg(
F.lit('result').alias('stat'),
*[
(
F.max(F.when(F.col('stat') == '75%', F.col(c))) -
F.max(F.when(F.col('stat') == '50%', F.col(c)))
).alias(c)
for c in df.columns[1:]
]
)
)
result.show()
+------+-----+-----+------+-----+
| stat|col_A|col_B| col_C|col_D|
+------+-----+-----+------+-----+
| count| 14| 14| 1414| 14|
| 75%| 4| 4001|160987| 49|
| 50%| 3| 3657|131225| 38|
|result| 1| 344| 29762| 11|
+------+-----+-----+------+-----+