2017-10-25 18 views
0

私のpyspark DataFrameには、2つのカラムprice1price2があります。私は式((price1 - price2)/price1)に基づいて新しい列resultを作成したいと思います。しかし、price1でもprice2もヌルでないことを確認したいと思います。price10ではありません。pysparkで新しい列を作成するには?

これらの条件を使用して新しい列を正しく作成するにはどうすればよいですか?あなたはUDFを使用することができる場合、私はあなたを考える

+0

'price1 == 0'または1つの価格が' null'の場合、どのような結果が期待できますか? – MaxU

+0

@MaxU:申し訳ありませんが、私はそれを指定していません。 'price1 == 0'または価格が' null'に等しい場合、 'result'は' 0'と等しくなると思います。 – Dinosaurius

答えて

1

..

from pyspark.sql import functions as F 

udf = F.udf(lambda x,y : 0 if x == 0 or not all((x,y)) else x-y/x) 
df = df.withColumn("result", udf(df["price1"],df["price2"])) 
0

今、私はこれを持っていますこのようにすることができます:

df = df.withColumn("result", df["price1"]-df["price1"]/df["price2"]).fillna(0) 
0
df = df.withColumn("result", 
when(df.col("price1").isNull OR df.col("price2").isNull OR df.col("price1")==0,0) 
.otherwise(df.col("price1")-df.col("price2")/df.col("price1"))) 

これはそれがスカラ座を使用して行うことができる方法で、

df = df.withColumn("result", df["price1"]-df["price2"]/df["price1"]) 
関連する問題