如何在数据帧中对特定时间段内的时间戳进行编号。

问题描述 投票:0回答:1

如果我们能把一天的时间分成 from 00:00:00 hrs to 23:59:00 变成 15 min 我们将有96个区块。我们可以将它们从0到95编号。我想添加一个"timeblock"列到数据框架中,我可以用时间戳所在的时间块号给每一行编号,如下图所示。

    tagdatetime            tagvalue     timeblock
    2020-01-01 00:00:00    47.874423    0
    2020-01-01 00:01:00    14.913561    0
    2020-01-01 00:02:00    56.368034    0
    2020-01-01 00:03:00    16.555687    0
    2020-01-01 00:04:00    42.138176    0
    ... ... ...
    2020-01-01 00:13:00    47.874423    0
    2020-01-01 00:14:00    14.913561    0
    2020-01-01 00:15:00    56.368034    0
    2020-01-01 00:16:00    16.555687    1
    2020-01-01 00:17:00    42.138176    1
    ... ... ...
    2020-01-01 23:55:00    18.550685    95
    2020-01-01 23:56:00    51.219147    95
    2020-01-01 23:57:00    15.098951    95
    2020-01-01 23:58:00    37.863191    95
    2020-01-01 23:59:00    51.380950    95
python pandas python-datetime
1个回答
1
投票

我认为有一个更好的方法来做,但我认为这是可能的下面。

 import pandas as pd
 import numpy as np

 tindex = pd.date_range('2020-01-01 00:00:00', '2020-01-01 23:59:00', freq='min')
 tvalue = np.random.randint(1,50, (1440,))
 df = pd.DataFrame({'tagdatetime':tindex, 'tagvalue':tvalue})

 min15 = pd.date_range('2020-01-01 00:00:00', '2020-01-01 23:59:00', freq='15min')
 tblock = np.arange(96)
 df2 = pd.DataFrame({'min15':min15, 'timeblock':tblock})

 df3 = pd.merge(df, df2, left_on='tagdatetime', right_on='min15', how='outer')
 df3.ffill(axis=0, inplace=True)
 df3 = df3.drop('min15', axis=1)

 df3.iloc[10:20,]

 tagdatetime    tagvalue    timeblock
 10 2020-01-01 00:10:00 20  0.0
 11 2020-01-01 00:11:00 25  0.0
 12 2020-01-01 00:12:00 42  0.0
 13 2020-01-01 00:13:00 45  0.0
 14 2020-01-01 00:14:00 11  0.0
 15 2020-01-01 00:15:00 15  1.0
 16 2020-01-01 00:16:00 38  1.0
 17 2020-01-01 00:17:00 23  1.0
 18 2020-01-01 00:18:00 5   1.0
 19 2020-01-01 00:19:00 32  1.0
© www.soinside.com 2019 - 2024. All rights reserved.