gpt4 book ai didi

pyspark - 计算从列表 pyspark 引用的列的乘积

转载 作者:行者123 更新时间:2023-12-05 01:52:23 27 4
gpt4 key购买 nike

我有一个循环生成多个因子表的输出并将列名存储在列表中:

| id | f_1a | f_2a |
|:---|:----:|:-----|
|1 |1.2 |0.95 |
|2 |0.7 |0.87 |
|3 |1.2 |1.4 |

col_lst = ['f1_a','f2_a']

| id | f_1b | f_2b | f_3b |
|:---|:----:|:-----|:-----|
|1 |1.6 |1.2 | 0.98 |
|2 |0.9 |0.65 | 1.7 |
|3 |1.1 |1.33 | 1.4 |

col_lst = ['f1_b','f2_b','f_3b']

我很难用 Pyspark 找出一个代码,该代码允许我创建一个新列,其中包含每个表中列出的列的乘积,这样:

| id | f_1a | f_2a | f_a |
|:---|:----:|:-----|:----|
|1 |1.2 |0.95 |1.14 |
|2 |0.7 |0.87 |0.61 |
|3 |1.2 |1.4 |1.68 |

| id | f_1b | f_2b | f_3b | f_b |
|:---|:----:|:-----|:-----|:-----|
|1 |1.6 |1.2 | 0.98 | 1.88 |
|2 |0.9 |0.65 | 1.7 | 1 |
|3 |1.1 |1.33 | 1.4 | 2.05 |

任何帮助将不胜感激

最佳答案

使用 reduce 应用一致函数,逐行乘以列值。

 df=spark.createDataFrame([(1   ,1.6   ,1.2   , 0.98)  , 
(2 ,0.9 ,0.65 , 1.7 ) ,
(3 ,1.1 ,1.33 , 1.4) ] ,

('id' , 'f_1b' , 'f_2b' , 'f_3b' ))
df.show()

解决方案

 df.withColumn('f_b', reduce(lambda a,b: round(a*b,2),[F.col(c) for c in  df.drop('id').columns])).show()

结果

+---+----+----+----+----+
| id|f_1b|f_2b|f_3b| f_b|
+---+----+----+----+----+
| 1| 1.6| 1.2|0.98|1.88|
| 2| 0.9|0.65| 1.7| 1.0|
| 3| 1.1|1.33| 1.4|2.04|
+---+----+----+----+----+

关于pyspark - 计算从列表 pyspark 引用的列的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71599753/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com