簡體   English   中英

Pyspark新建列的使用和條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM