我有一个包含事件列表的 Dataframe ,一列表示标准的指示符,还有一列表示时间戳。
对于每个事件,如果指示符为真,我想看看事件是否持续了一个以上的周期,以及持续了多长时间。
就预期输出而言,我提供了以下示例。对于duration列,A仅在一个时间段为真,因此将编码为1。然后,A在下一个时间段为假,因此将编码为0。然后,A在两个时间段为真,因此duration为2。由于我只对第一个条目感兴趣,因此下一个条目可以编码为0,依此类推。
id target time duration
0 A True 2023-01-22 11:00:00 1
3 A False 2023-01-22 11:05:00 0
6 A True 2023-01-22 11:10:00 2
9 A True 2023-01-22 11:15:00 0
12 A False 2023-01-22 11:20:00 0
但我不知道该怎么做。
下面包括一个 Dataframe 示例
import pandas as pd
time_test = pd.DataFrame({'id':[
'A','B','C','A','B','C',
'A','B','C','A','B','C',
'A','B','C','A','B','C'],
'target':[
'True','True','True','False','True','True',
'True','False','True','True','True','True',
'False','True','False','True','False','True'],
'time':[
'11:00','11:00','11:00','11:05','11:05','11:05',
'11:10','11:10','11:10','11:15','11:15','11:15',
'11:20','11:20','11:20','11:25','11:25','11:25']})
time_test =time_test.sort_values(['id','time'])
time_test['time'] =pd.to_datetime(time_test['time'])
time_test
编辑:我需要提供一些关于预期输出的说明
让我们以B组为例。B组在11:00发生了一个事件,由target下的“True”表示。在11:05,事件仍在发生,因此对于行1 B True 2023-01-22 11:00:00
,持续时间应为2。我对下面的行不感兴趣,因此可以将其编码为0。因此,在a中,since 0表示“已说明”和事件的不存在。
在11:10,该事件没有发生,因此求和将重置。
在11:15,另一个事件正在发生,而在11:20,该事件仍在继续,因此第一行的值应为2。
最后,B的值应为2,0,0,2,0,0。
我可以理解为什么这个方法会让人困惑,但我希望我的解释能让人理解。我的数据是5分钟的块,所以我想我可以只计算块的数量来看看一个事件持续了多长时间,而不是使用开始和结束时间来计算经过的时间(但也许那样会更容易?)
1条答案
按热度按时间cwxwcias1#
注解代码
结果