首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据其他列中满足的条件添加列

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

Stack Overflow用户
提问于 2019-05-04 05:33:09
回答 1查看 267关注 0票数 1

我是PySpark的新手,目前在以下问题上将面临挑战。我有一个火花df,如下所示

代码语言:javascript
复制
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

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

代码语言:javascript
复制
if 0.20 * max(INUT) > max(max(A),max(B)) then Status = 'Imbalance' else 'Balance'

预期上述逻辑将产生以下数据。

代码语言:javascript
复制
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,下面是我正在使用的代码

代码语言:javascript
复制
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')

上面的代码段正在抛出一个错误

代码语言:javascript
复制
AttributeError: 'tuple' object has no attribute 'otherwise'

我错过了哪里?如有任何提示,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-04 09:58:54

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

代码语言:javascript
复制
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,因为它使我更容易阅读,我相信

输出:

代码语言:javascript
复制
+--------+-----+-----+--------+---------+
|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|
+--------+-----+-----+--------+---------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55979774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档