首页 > 解决方案 > pyspark withColumn 问题

问题描述

基本上,

输入 Pyspark 数据框如下

a 1 2 3 4 5 6 7 8 
1 9 0 9 0 0 0 0 0  
2 0 9 9 0 0 0 0 0 
3 0 0 9 0 0 0 0 0  
4 0 0 9 9 0 0 0 0  
5 0 0 9 0 9 0 0 0  
6 0 0 9 0 0 9 0 0  
7 0 0 9 0 0 0 9 0  
8 0 0 9 0 0 0 0 9 

我希望输出是

a 1 2 3 4 5 6 7 8 
1 4 0 9 0 0 0 0 0  
2 0 4 9 0 0 0 0 0 
3 0 0 4 0 0 0 0 0  
4 0 0 9 4 0 0 0 0  
5 0 0 9 0 4 0 0 0  
6 0 0 9 0 0 4 0 0  
7 0 0 9 0 0 0 4 0  
8 0 0 9 0 0 0 0 4 

我做了一些研究,我需要使用withColumnreplace函数来完成我的任务。

我如何从 A 列查询值并将该值用作列名来 复制94

请提出解决方案

标签: pythonpysparkapache-spark-sqlpyspark-dataframes

解决方案


试试这个:

df.select("a", *(F.when(F.col("a")==F.lit(int(x)),F.lit(4)).otherwise(F.col(x)).alias(x)\
                 for x in df.columns if x!='a')).show()

#+---+---+---+---+---+---+---+---+---+
#|  a|  1|  2|  3|  4|  5|  6|  7|  8|
#+---+---+---+---+---+---+---+---+---+
#|  1|  4|  0|  9|  0|  0|  0|  0|  0|
#|  2|  0|  4|  9|  0|  0|  0|  0|  0|
#|  3|  0|  0|  4|  0|  0|  0|  0|  0|
#|  4|  0|  0|  9|  4|  0|  0|  0|  0|
#|  5|  0|  0|  9|  0|  4|  0|  0|  0|
#|  6|  0|  0|  9|  0|  0|  4|  0|  0|
#|  7|  0|  0|  9|  0|  0|  0|  4|  0|
#|  8|  0|  0|  9|  0|  0|  0|  0|  4|
#+---+---+---+---+---+---+---+---+---+

推荐阅读