我有以下名為“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”列中,我需要用另一個字串“Collect”替換值“OTH/CON”和“Freight Collect”。并將“DBG”替換為“處置”。然后將值放入新列“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")))
但我最終只將“貨運收集”值更改為“收集”。“OTH/CON”保持原樣。
我無法弄清楚為什么!
我的預期輸出如下:
--------------- --- -------
| A| B| aa|
--------------- --- -------
| OTH/CON| 2|Collect|
|Freight Collect| 3|Collect|
| OTH/CON| 4|Collect|
| DBG| 5|Dispose|
--------------- --- -------
有人可以幫忙嗎?
uj5u.com熱心網友回復:
您可以將多個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|
--------------- --- -------
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370300.html
