[英]Using and condition in creating a new column in Pyspark
我想比較 pyspark 數據幀中的 2 列 - var_pulled 和 var_prod 並生成一個新列作為指標。 如果 var_pulled 是 null 並且 var_prod 在 ['0','@','~',' '] 中,那么我希望新列為 1,否則為 0。以下是我正在使用的代碼 -
g9_all2 = g9_all1.withColumn('var', when((g9_all1['var_pulled'].isNull() & (g9_all1['var_prod'] in ['0','@','~',' '])) ,1).otherwise(0))
這是我得到的錯誤 -
無法將列轉換為布爾值:請使用 '&' 表示 'and'、'|' 在構建 DataFrame boolean 表達式時,為 'or','~' 為 'not'。
有人可以幫幫我嗎? 在這種情況下有解決方法嗎?
我制作了一些示例數據來實現您正在尋找的內容。
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
spark = SparkSession.builder \
.appName('so')\
.getOrCreate()
sc= spark.sparkContext
df = sc.parallelize([
(None, "0"), ("abc", "^"), (None, "~"), ("belgium", "!")
]).toDF(["var_pulled","var_prod"])
df.show()
# +----------+--------+
# |var_pulled|var_prod|
# +----------+--------+
# | null| 0|
# | abc| ^|
# | null| ~|
# | belgium| !|
# +----------+--------+
df.withColumn("new_col", F.when((F.col("var_pulled").isNull() & F.col("var_prod").isin('0','@','~',' ')), 1).otherwise(0)).show()
# +----------+--------+-------+
# |var_pulled|var_prod|new_col|
# +----------+--------+-------+
# | null| 0| 1|
# | abc| ^| 0|
# | null| ~| 1|
# | belgium| !| 0|
# +----------+--------+-------+
嘗試將第二次檢查更改為g9_all1['var_prod'].isin(['0','@','~',' '])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.