pyspark withColumn 问题

pyspark withColumn issue

基本上,

输入 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 中查询值并将该值用作列名以将 9 替换为 4

请提出解决方案

试试这个:

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|
#+---+---+---+---+---+---+---+---+---+