具有三个条件的pyspark df.withColumn

Posted

技术标签:

【中文标题】具有三个条件的pyspark df.withColumn【英文标题】:pyspark df.withColumn with three conditions 【发布时间】:2019-11-11 12:27:48 【问题描述】:

我有两列分别代表'TeamName''MatchResult',例如:

ManCity    L
Liverpool  D
Arsenal    W

我正在尝试根据不同足球队的比赛结果创建代表'Points' 的第三列。所以赢3分,平1分,输0分

我尝试过使用 when 和 if 的函数 .withColumn,但无法正确获取 syntax

非常感谢您抽出宝贵时间

ManCity    L    0
Liverpool  D    1
Arsenal    W    3

【问题讨论】:

【参考方案1】:

你可以使用:

from pyspark.sql.functions import when, col

df = df.withColumn("points", when(col("MatchResult") == "W", 3).when(col("MatchResult") == "D", 1).otherwise(0))

【讨论】:

首先,感谢您的回答,我导入了函数(来自 pyspark.sql.functions import col, expr, when)。我可能会错过其他我尝试过的 sintaxis 的东西,这就是即将发生的事情。 AttributeError: 'NoneType' 对象没有属性 'withColumn' AttributeError Traceback (最近一次调用最后) in ----> 1 dfHTPoints = dfHT.withColumn("HTP", when(col(" HTR") == "H", 3).when(col("HTR") == "D", 1).otherwise(0)) AttributeError: 'NoneType' 对象没有属性 'withColumn' 什么是dfHT?是NoneType,请检查是否与您在原问题中提到的数据框相同 dfHT 是我使用函数 select 过滤数据创建的一个新数据框,因为初始数据都在同一行和三列中(H 代表主队获胜时,D 代表何时当客队获胜时有平局和A)即/ 曼城 / 利物浦 / H / -- / 利物浦 / 阿森纳 / D / -- / 阿森纳 / 曼城 / A / -- @ruben.lfdz 请打印该变量并将输出粘贴到您的问题中 我不知道如何,但我在创建它时通过添加 display(dfHT) 设法对其进行了整理。感谢您的宝贵时间

以上是关于具有三个条件的pyspark df.withColumn的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark - 具有重置条件的累积和

Pyspark - 获取具有条件的列的累积总和

使用pyspark中的条件创建具有运行总量的列

Pyspark 窗口函数,具有对旅行者数量进行取整的条件

在 Pyspark/Hive 中有条件的运行总计

Pyspark/Hive 中带条件的加权运行总计