所以我列出了一个数据框,如下所示:
StartTime StartName StopTime StopName
10.00 A 11.00 B
11.00 B 13.00 C
14.00 D 17.00 A
我想过滤掉一行上的 StartName 列与下一行上的 StopName 列的位置。我希望创建一个新的数据框如下:
StartTime StartName StopTime StopName
13.00 C 14.00 D
我有点迷茫,我尝试过使用 window 但无法弄清楚。任何帮助将不胜感激。
答案 0 :(得分:0)
使用 Window
有效:您可以将前一行的 StopName
作为新列添加到每一行,然后根据您的要求过滤掉:
w = Window.orderBy("StartTime").rowsBetween(-1,-1)
df = ...
df = df.withColumn("PrevStopName", F.lag("StopName").over(w))
df = df.filter("StartName <> PrevStopName").drop("PrevStopName")
由于窗口定义不包含分区,警告
WARN WindowExec: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.
会出现。
为防止出现性能问题,输入数据还应包含一个分组列,该列将窗口操作中应一起考虑的所有行分组在一起。然后应将此列用作 Window.partitionBy
的参数。