【问题标题】:How to replace a particular value in a Pyspark Dataframe column with another value?如何用另一个值替换 Pyspark Dataframe 列中的特定值?
【发布时间】:2022-01-06 15:10:26
【问题描述】:

我有以下名为“df”的 Pyspark 数据框:

A = ["OTH/CON", "Freight Collect", "OTH/CON", "DBG"]
B = [2, 3, 4, 5]
df = sqlContext.createDataFrame(zip(A, B), schema=['A', 'B'])

在“A”列中,我需要将值“OTH/CON”和“Freight Collect”替换为另一个字符串“Collect”。并将“DBG”替换为“Dispose”。然后将值放入新列“aa”。我执行以下操作:

from pyspark.sql import functions as F
df = df.withColumn("aa", F.when(F.col("A").isin(["OTH/CON"]), F.lit("Collect")).otherwise(F.col("A")))
df = df.withColumn("aa", F.when(F.col("A").isin(["Freight Collect"]), F.lit("Collect")).otherwise(F.col("A")))
df = df.withColumn("aa", F.when(F.col("A").isin(["DBG"]), F.lit("Dispose")).otherwise(F.col("A")))

但我最终只将“Freight Collect”值更改为“Collect”。 “OTH/CON”保持原样。

我不知道为什么!

我的预期输出如下:

+---------------+---+-------+
|              A|  B|     aa|
+---------------+---+-------+
|        OTH/CON|  2|Collect|
|Freight Collect|  3|Collect|
|        OTH/CON|  4|Collect|
|            DBG|  5|Dispose|
+---------------+---+-------+

有人可以帮忙吗?

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql apache-spark-2.0


    【解决方案1】:

    您可以将多个isin 条件合并为一个

    (df
        .withColumn('aa', F
            .when(F.col('A').isin(['OTH/CON', 'Freight Collect']), F.lit('Collect'))
            .when(F.col('A').isin(['DBG']), F.lit('Dispose'))
            .otherwise(F.col('A'))
        )
        .show()
    )
    
    +---------------+---+-------+
    |              A|  B|     aa|
    +---------------+---+-------+
    |        OTH/CON|  2|Collect|
    |Freight Collect|  3|Collect|
    |        OTH/CON|  4|Collect|
    |            DBG|  5|Dispose|
    +---------------+---+-------+
    

    【讨论】:

    • 不,我的逻辑很清楚。我打算根本不篡改原始列,因此想将列“A”的值更新为新列“aa”。但是当我这样做时,我最终只会将“Freight Collect”值更改为“Collect”。
    • 你能在你的问题中发布你的预期输出吗?然后我会更新我的答案
    • 我已经更新了问题中的预期输出。
    • 我已经更新了我的答案:)
    • 现在我明白你从一开始就在说什么了。原因如下,请将您的 3 行单独考虑为:1)您创建新的 aa 列,并将值替换为 OTH/CON。 2) 您 覆盖 aa 列用新值替换为“货运收集”,这意味着 1) 处的所有计算值都已消失。同 3)
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 2020-10-16
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2017-08-14
    相关资源
    最近更新 更多