gpt4 book ai didi

apache-spark - 通过检查另一行的条件更新特定行中的值,pyspark

转载 作者:行者123 更新时间:2023-12-05 04:53:00 27 4
gpt4 key购买 nike

所以我尝试了很多东西,但似乎没有任何效果。查看数据框。

df

<表类="s-表"><头>索引 bool New_Bool<正文>1正确正确2正确正确3正确正确4错误正确

我想更新一列 ( New_bool )。如果列 Bool,它应该包含 False已经是 false 并且它还应该在 index=1 的行中包含 false如果Boolindex=4 排在一起也是假的。所有其他行应保持原样。我无法做到这一点...请参阅下面的预期输出。

<表类="s-表"><头>索引 bool New_Bool<正文>1正确错误2正确正确3错误错误4错误错误

我尝试了 .when 语句的不同组合,但没有奏效。迄今为止的最佳解决方案:

df = df.withColumn('New_Bool', F.when((F.col('index')==4) &
((F.col('Bool')==False), False))

但这会产生:

<表类="s-表"><头>索引 bool New_Bool<正文>1正确无2正确无3正确无4错误错误

如果我现在能够用 New_Bool 中第 4 行的值填充所有 Nones猜猜这会有所帮助。然后我会设置另一个最后一列:

df = df.withColumn('Final_Bool', F.when((F.col('index')==1) &
((F.col('New_Bool')==False), False).otherwise(F.col('Bool'))

虽然我对任何事情都不确定了,因为我尝试了很多组合....顺便说一句,我将有很多组这些数据帧,这就是为什么我需要一个与 groupby 或窗口函数一起工作的解决方案。

乐于接受每一个建议 :)

最佳答案

您还可以选择最后一个索引的 Bool 值到一个变量中,并在 when 表达式中使用它,如下所示:

from pyspark.sql import functions as F

# or actually, if the index is always = 4 you can just filter without ordering
last_bool = df.orderBy(F.desc("index")).limit(1).select("Bool").first().Bool

df2 = df.withColumn(
'New_Bool',
F.when(
F.col('index') == 1,
F.lit(last_bool) & F.col("New_bool") # keep New_bool or update to false if last is false
).otherwise(
F.col("New_bool") & F.col("Bool") # keep New_bool or update to false if Bool is false
)
)

df2.show()
# +-----+-----+--------+
# |index| Bool|New_Bool|
# +-----+-----+--------+
# | 1| true| false|
# | 2| true| true|
# | 3|false| false|
# | 4|false| false|
# +-----+-----+--------+

关于apache-spark - 通过检查另一行的条件更新特定行中的值,pyspark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66279504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com