【发布时间】:2021-02-22 21:18:53
【问题描述】:
所以我尝试了很多东西,但似乎没有任何效果。 查看数据框。
df
| index | Bool | New_Bool |
|---|---|---|
| 1 | True | True |
| 2 | True | True |
| 3 | True | True |
| 4 | False | True |
我想更新一个列 (New_bool)。如果列Bool 已经为假,则它应该包含假,并且如果Bool 行中的index=4 也为假,它也应该包含假与index=1。所有其他行应保持原样。我无法做到这一点...请参阅下面的预期输出。
| index | Bool | New_Bool |
|---|---|---|
| 1 | True | False |
| 2 | True | True |
| 3 | False | False |
| 4 | False | False |
我尝试了 .when 语句的不同组合,但没有奏效。迄今为止最好的解决方案:
df = df.withColumn('New_Bool', F.when((F.col('index')==4) &
((F.col('Bool')==False), False))
但这会产生:
| index | Bool | New_Bool |
|---|---|---|
| 1 | True | None |
| 2 | True | None |
| 3 | True | None |
| 4 | False | False |
如果我现在能够用New_Bool 中第 4 行的值填充所有无值,那我猜这会有所帮助。然后我会设置另一个最后一列:
df = df.withColumn('Final_Bool', F.when((F.col('index')==1) &
((F.col('New_Bool')==False), False).otherwise(F.col('Bool'))
虽然我对任何事情都不确定,因为我尝试了这么多组合....顺便说一下,我将拥有许多组这些数据帧,这就是为什么我需要一个与 groupby 或窗口函数一起使用的解决方案。
对每一个建议都很满意 :)
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql