【问题标题】:python - Convert Time series Events into on off pairpython - 将时间序列事件转换为开关对
【发布时间】:2021-03-02 14:02:19
【问题描述】:

我有一个包含安全相关警报和正常设备警报的表格。这些警报正在被记录。表格看起来像

Name                        record     Timestamp
S303R2_LS_STN_ATD_SENSOR_ERR    1   19-11-2020 06:22:53
S303R2_LS_STN_ATD_SENSOR_ERR1   1   19-11-2020 06:22:53
S303R2_LS_STN_ATD_SENSOR_ERR    0   19-11-2020 06:22:55
S303R2_LS_STN_ATD_SENSOR_ERR1   0   19-11-2020 06:22:55
S304R2_LS_STN_ATD_SENSOR_ERR    1   19-11-2020 07:05:28
S304R2_LS_STN_ATD_SENSOR_ERR    0   19-11-2020 07:05:30

用于安全相关标签;如果记录=0,报警开启,记录=1,正常设备标签报警关闭(条件1);如果record=1,报警开启,record=0,报警关闭(条件2)

我想要得到的是

    Name                              intime                   outtime 
S303R2_LS_STN_ATD_SENSOR_ERR    19-11-2020 06:22:53   19-11-2020 06:22:55
S303R2_LS_STN_ATD_SENSOR_ERR1   19-11-2020 06:22:53   19-11-2020 06:22:55
S304R2_LS_STN_ATD_SENSOR_ERR    19-11-2020 07:05:28   19-11-2020 07:05:30
S302R1_LS_STN_ATD_SENSOR_ERR    19-11-2020 08:07:08   19-11-2020 08:07:15

我有一个普通设备标签的列表。如果此标签名称在列表中可用,则应根据条件 2 形成警报开/关对,否则应根据条件 1 形成警报开/关。

注意:当设备关闭和打开时,这会变得很棘手。所有的装备标签都会被初始化为 0,安全标签被初始化为 1。

附数据集链接:https://drive.google.com/file/d/19NIm_WWJDqSOUDc3O5G9pFW2InsQ4GOT/view普通装备标签链接:https://drive.google.com/file/d/1UFFT-m4j6xlzKVQk8qjjsrZuQj6jJwSG/view

【问题讨论】:

    标签: python pandas dataframe loops iterator


    【解决方案1】:

    Name, record 对中有重复项,因此首先由 GroupBy.cumcount 创建辅助列,然后使用 DataFrame.pivot 删除辅助列并重命名列:

    df['g'] = df.groupby(['Name','record']).cumcount()
    df1 = (df.pivot(index=['Name', 'g'], columns='record',values='Timestamp')
             .rename(columns={0:'intime',1:'outtime'})
             .reset_index(level=1, drop=True)
             .reset_index())
    

    最后是用Series.isin 用掩码在列中交换值,用于list 的测试成员资格:

    m = df1['Name'].isin(L)
    df1.loc[m, ['intime','outtime']] = df1.loc[m, ['outtime','intime']].to_numpy()
    

    print (df1)
    record                           Name               intime  \
    0        S302R1_LS_STN_ATD_SENSOR_ERR  19-11-2020 08:07:08   
    1        S302R1_LS_STN_ATD_SENSOR_ERR  19-11-2020 08:07:19   
    2           S302_INTI_RB2_WATER_ERROR  19-11-2020 08:57:08   
    3           S302_INTI_RB2_WATER_ERROR  19-11-2020 08:58:00   
    4        S303R2_LS_STN_ATD_SENSOR_ERR  19-11-2020 06:22:53   
    5       S303R2_LS_STN_ATD_SENSOR_ERR1  19-11-2020 06:22:53   
    6        S304R2_LS_STN_ATD_SENSOR_ERR  19-11-2020 07:05:28   
    7        S315R1_LS_STN_ATD_SENSOR_ERR  19-11-2020 11:58:48   
    8        S316R2_LS_STN_ATD_SENSOR_ERR  19-11-2020 11:45:32   
    9        S317R2_LS_STN_ATD_SENSOR_ERR  19-11-2020 11:45:32   
    10       S318R1_LS_STN_ATD_SENSOR_ERR  19-11-2020 11:58:48   
    
    record              outtime  
    0       19-11-2020 08:07:15  
    1       19-11-2020 11:57:20  
    2       19-11-2020 08:57:59  
    3       19-11-2020 08:58:00  
    4       19-11-2020 06:22:55  
    5       19-11-2020 06:22:55  
    6       19-11-2020 07:05:30  
    7       19-11-2020 11:58:59  
    8       19-11-2020 11:45:50  
    9       19-11-2020 11:59:50  
    10      19-11-2020 11:58:59  
    

    【讨论】:

    猜你喜欢
    • 2021-03-05
    • 2021-02-13
    • 2021-08-02
    • 1970-01-01
    • 2016-02-12
    • 2021-09-23
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多