获取系列 first/last 出现的日期

Get date of first/last appearance of a series

这个问题的标题不清楚,但我不知道如何表述... 我有一个数据框,每分钟都可以解释滑雪缆车上是否有 queue

数据框包含 2 列: - 分钟 = 我们正在看的分钟 - Queue = 1 如果此时有 queue,否则为 0

例如:

from 08h00 to 10h00 each line get a 0 into "Queue"
from 10h01 to 10h45 each line get a 1 into "Queue"
from 10h46 to 14h00 each line get a 0 into "Queue"
from 14h01 to 14h45 each line get a 1 into "Queue"
from 10h45 to 17h30 each line get a 0 into "Queue"

我想创建一个包含 2 列的新数据框

----------------------
Start      |    End
----------------------
10h01      |   10h45
14h01      |   14h45

我设法得到这样的数据框:

----------------------
Start      |    End
----------------------
10h01      |   None
None       |   10h45
14h01      |   None
None       |   14h45

使用:

df2=df.withColumn('start', F.when((F.col("Prev_Queue") == 0) & (F.col("Queue") == 1), F.col('NextMin')).otherwise(None))

df2=df2.withColumn('end', F.when((F.col("Next_Queue") == 0) & (F.col("Queue") == 1), F.col('NextMin')).otherwise(None))

其中"Prev_Queue"是Queue前一分钟的值,"Next_Queue"是Queue下一分钟的值。

关于如何获取我想要的数据框(从我设法获取的数据框或使用更简单的方法)的任何想法? 提前致谢:-)

我得到了同事的帮助 ;-)

关于信息,我还有一栏,"skilift",包含我感兴趣的滑雪缆车的名称

解决方法如下:

w = Window.partitionBy('Skilift').orderBy('Minute')
df = df.withColumn("rnk", F.when(F.lag('Queue').over(w) != F.col('Queue'), 1).otherwise(0))\
.withColumn('rnk2', F.sum('rnk').over(w))

df.where("queue = 1").groupBy('skilift','rnk2').agg(F.min('Minute'), F.max('Minute')).drop('rnk2').drop('rnk').show(truncate=False)