我有一个df
+------+-------+-----+
|values|percent|ecpc |
+------+-------+-----+
| 010 | 0.11 | 5|
| 100 | 0.22 | 4|
| 001 | 0.33 | 3|
| 011 | 0.01 | 5|
| 101 | 0.005| 4|
| 110 | 0.11 | 3|
| 000 | 0.21 | 5|
| 111 |0.0001 | 4|
+------+-------+-----+
如果为< 0.01
%,我想将1
中的值更改为0
。
AND更改百分比> 0.01
,将ecpc更改为新的ecpc。
EX:对于值111,百分比<0.01
,将1
中的一个更改为0
,如101
,
仍为百分之< 0.01
,更改其他1,如110,百分比>0.01
为0.11
,
更改另一个1,如011,百分比>0.01
为0.01。 0.01 <0.11
。
在values = 111
时将ecpc更新为5。
最终DF如:
+------+-------+-----+------+
|values|percent|ecpc |change|
+------+-------+-----+------+
| 010 | 0.11 | 5| 0|
| 100 | 0.22 | 4| 0|
| 001 | 0.33 | 3| 0|
| 011 | 0.01 | 5| 0|
| 101 | 0.005| 5| 1|
| 110 | 0.11 | 3| 0|
| 000 | 0.21 | 5| 0|
| 111 |0.0001 | 3| 1|
+------+-------+-----+------+
答案 0 :(得分:1)
我们假设你想在一个条件下更新一行(例如,当百分比<0.11时,更改= 1,否则为0)。你会做这样的事情:
val newDF = df.withColumn("change", when($"percent" < 0.11, lit(1)).otherwise(lit(0))
当您进行额外更改时,只需将它们链接起来:
val newDFCombined = newDF.withColumn("ecpc", when($"percent" < 0.11, myFunc1($"values").otherwise(myFunc2($"values"))))
其中myFunc1和MyFunc2是计算所需值的函数。