python - 根据其他列中满足的条件添加列

标签 python pyspark

我是 PySpark 的新手,目前面临以下问题的挑战。 我有一个 Spark df 如下

DeviceID     max(A)    max(B)    max(INUT)
0023002      2.5       3.7       8.1
0023045      2.2       1.3       11.3
0023008      4.7       2.3       1.9

我如何添加另一列作为“状态”,其中值将基于以下逻辑。

if 0.20 * max(INUT) > max(max(A),max(B)) then Status = 'Imbalance' else 'Balance'

上述逻辑预计会产生以下数据帧。

DeviceID     max(A)    max(B)    max(INUT)    Status
0023002      2.5       3.7       8.1          'Balance'
0023045      2.2       1.3      11.3          'ImBalance'
0023008      4.7       2.3       1.9          'Balance'

现在要实现上面的df,下面是我正在使用的代码

from pyspark.sql.function import col
import pyspark.sql.function as F
df_final = df.withColumn(
             'Status',
             F.when(col('max(INUT)')*0.20 > F.greatest(col('max(A)'),col('max(B)'),
             'Imbalance')\
         .otherwise('Balance')

上面的代码片段抛出错误,如下所示

AttributeError: 'tuple' object has no attribute 'otherwise'

我错过了什么?任何提示将不胜感激。

最佳答案

这里有一些小语法错误,这是您的最终代码:

import pyspark.sql.functions as F

df = spark.createDataFrame(
[("0023002", 2.5, 3.7, 8.1),
("0023045", 2.2, 1.3, 11.3),
("0023008", 4.7, 2.3, 1.9)], ["DeviceID", "max_A", "max_B", "max_INUT"])

df_final = df.withColumn('Status', \
             F.when(F.col('max_INUT')*0.20 > F.greatest(F.col('max_A'),F.col('max_B')), 'Imbalance') \
         .otherwise('Balance'))

以及一些评论/评论:

  1. 要使用 pyspark.sql.functions 中的函数,只需使用 F 别名即可。您不需要导入两次。
  2. 缺少一些括号
  3. 我还替换了 max(A) -> max_A 因为我相信它更容易阅读

输出:

+--------+-----+-----+--------+---------+
|DeviceID|max_A|max_B|max_INUT|   Status|
+--------+-----+-----+--------+---------+
| 0023002|  2.5|  3.7|     8.1|  Balance|
| 0023045|  2.2|  1.3|    11.3|Imbalance|
| 0023008|  4.7|  2.3|     1.9|  Balance|
+--------+-----+-----+--------+---------+

关于python - 根据其他列中满足的条件添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55979774/

相关文章:

pandas - pyspark 在 ipython 笔记本中将数据框显示为带有水平滚动的表格

python - 使用 Pandas 或 Pyspark 将 'trees' 与两列中表示的关系展平

apache-spark - 如何合并pyspark中的重复列?

python - 尽管遵循安装说明,Beaker 仍无法找到 Python 和 Julia 安装

python - 查找networkx中每对节点之间的边

Python Tkinter - 保存 Canvas - tkinter 崩溃

python - 从 PySpark ML 中的 DecisionTreeClassifier 获取 toDebugString

pyspark - AWS EMR 集群中的 session 不处于事件状态 Pyspark

python - 我如何在 Selenium 中区分这两个按钮?

python - 通过 Python 将 UTC 时间转换为 GPS 时间