Я думаю, это то, что вы хотите. Встроенные искры when/otherwise
являются адекватными. Вам просто нужно express логическое значение соответственно.
from pyspark.sql import functions as F
df.withColumn("ref_low", F.when((F.col("unit")=='cm')&((F.col("ref_low")<40)|\
(F.col("ref_low")==20)), F.col("ref_low")/100)\
.otherwise(F.col("ref_low")))\
.withColumn("ref_high", F.when((F.col("unit")=='cm')&((F.col("ref_high")<90)&\
(F.col("ref_high")>70)),F.col("ref_high")/100)\
.otherwise(F.col("ref_high"))).show()
#+-----+-------+--------+
#| unit|ref_low|ref_high|
#+-----+-------+--------+
#| cm| 0.3| 50.0|
#| cm| 40.0| 70.0|
#| cm| 0.2| 0.85|
#| cm| 0.2| 0.85|
#| cm| 0.3| 0.76|
#| cm| 43.0| 65.0|
#|Meter| 0.2| 0.65|
#|Meter| 0.4| 0.68|
#|Meter| 0.5| 0.8|
#+-----+-------+--------+