我有以下数据集
id col1 ... col10 quantity
0 2 3 0
1 1 4 2
2 0 4 2
3 2 2 0
只有当quantity等于2时,我才想将col1到col10的值乘以2,否则我想保留以前的值。下面是结果的一个示例:
id col1 ... col10 quantity
0 2 3 0
1 2 8 2
2 0 8 2
3 2 2 0
现在我编写了以下代码:
cols_names = df.drop('id','quantity').columns
df = df.withColumn("arr", F.when(F.col('quantity') == 2, F.struct(*[(F.col(x)* 2).alias(x) for x in\
cols_names]))).select("id","quantity","arr.*")
这个方法的唯一问题是当条件不满足时,我得到的是空值而不是保留旧值。当条件不满足时,我怎么能保留旧值呢?或者如果有更简单的方法来做到这一点,那就太好了。
1条答案
按热度按时间cwxwcias1#
你需要使用
otherwise
子句和when
子句。如果你不给予otherwise
子句,它会在不匹配的情况下使用默认值None
。