有没有办法根据state列的值分配操作id?其目的是为每个从开始到结束的序列分配递增的id。例如:在下表中,在2020-09-15 22:49开始的初始操作得到操作id=1,并且直到操作结束的所有行也将得到id 1。每个开始/结束状态以及开始和结束之间的所有“打开”状态将具有相同的id。
Timestamp |state | operation id
----------------------------------------
2020-09-15 22:53 start 1
2020-09-16 22:53 on 1
2020-09-17 22:53 on 1
2020-09-18 22:53 on 1
2020-09-19 22:53 end 1
2020-09-20 22:53 off null
2020-09-21 22:53 off null
2020-09-22 22:53 off null
2020-09-23 22:53 start 2
2020-09-24 22:53 on 2
2020-09-25 22:53 end 2
2020-09-26 22:53 start 3
2020-09-27 22:53 end 3
时间戳和状态列可用。目的是构建operation id列。
1条答案
按热度按时间vql8enpb1#
你可以使用
Window
按“timestamp”排序的函数。既然你想要operation_id
永远null
当“state”为“off”时,我会过滤状态为“off”的行,并将其作为单独的Dataframe。我们将“开始”指定为1
“开”为0
,和“结束”为2
首先,找一个incremental sum
在这个新的编号上,在您的窗口上指定“state”列。这个incremental sum
与“结束”状态相对应的总是3的倍数。这也将是你的“结束序列”为了得到你需要的东西,你必须使用
lag
上的函数incremental sum
列,然后用滞后值替换3的倍数。最后一步是除以3,将其转换为整数并加1。现在工会
df_not_off
以及df_off
对于最终输出您的Dataframe:
操作:
输出: