所以我试了一堆东西,但都没用。请参见Dataframe。
测向
indexboolnew\u bool1true2true3true4false真
我想更新一列( New_bool
). 它应该包含false if列 Bool
已经是false,并且它的行中也应该包含false index=1
如果 Bool
与…排成一行 index=4
也是假的。所有其他行应保持原样。我无法做到这一点…请看下面的预期输出。
IndexBool1TrueFalse2True3False4FalseFalse索引
我尝试了不同的。when语句组合,但没有成功。迄今为止最好的解决方案:
df = df.withColumn('New_Bool', F.when((F.col('index')==4) &
((F.col('Bool')==False), False))
但这会产生:
IndexBool1TrueNone2TrueNone3TrueNone4FalseFalse索引
如果我现在能用中第4行的值填充所有的none New_Bool
我想那会有帮助的。然后,我又建立了另一个专栏:
df = df.withColumn('Final_Bool', F.when((F.col('index')==1) &
((F.col('New_Bool')==False), False).otherwise(F.col('Bool'))
因为我尝试了太多的组合,所以我不再确定什么了……顺便说一句,我将有许多组Dataframe,这就是为什么我需要一个与groupby或窗口函数一起工作的解决方案。
乐于接受每一个建议:)
2条答案
按热度按时间lymnna711#
您还可以选择最后一个索引的
Bool
将值转换为变量,并在表达式中使用它,如下所示:s8vozzvw2#
你可以用
lead
当index=1时检查index=4的行。对于其他索引,只需保留bool列。另一种方法是交叉连接到索引为4的行的bool:
如果4总是最后一个索引,那么可以使用
last
: