【问题标题】:How to create a time threshold based column given a time gap?如何在给定时间间隔的情况下创建基于时间阈值的列?
【发布时间】:2018-11-07 09:17:12
【问题描述】:

我有一个包含几列的 pandas 数据框,但出于视觉目的,请考虑列 Idtimestamp。如您所见,熊猫数据框按Id 列排序。

Id                timestamp

11           2018-10-19 13:00:00
11           2018-10-19 13:05:00
11           2018-10-19 13:06:00
11           2018-10-19 13:07:00
11           2018-10-19 13:30:00
11           2018-10-19 13:31:00
11           2018-10-19 13:32:00
11           2018-10-19 13:55:00
11           2018-10-19 13:54:00
11           2018-10-21 20:47:09
11           2018-10-21 20:48:27
11           2018-10-21 20:48:45
11           2018-10-21 20:48:52
12           2018-10-09 20:30:46
12           2018-10-09 20:30:22
12           2018-10-09 20:30:05
12           2018-10-09 20:29:44
12           2018-10-09 20:29:31
13           2018-10-19 18:49:08
13           2018-10-19 18:49:13
13           2018-10-11 18:46:15
14           2018-10-11 10:46:40
14           2018-10-23 10:39:52

如何根据 10 分钟的时间间隔创建另一个 ID 列?即为每个时间戳 10 分钟阈值创建一个新的不同 `ID_2:

Id                timestamp            ID_2

11           2018-10-19 13:00:00        01   
11           2018-10-19 13:05:00        01
11           2018-10-19 13:06:00        01
11           2018-10-19 13:07:00        01
11           2018-10-19 13:30:00        02
11           2018-10-19 13:31:00        02
11           2018-10-19 13:32:00        02
11           2018-10-19 13:55:00        03
11           2018-10-19 13:54:00        03
11           2018-10-21 20:47:09        04
11           2018-10-21 20:48:27        04
11           2018-10-21 20:48:45        04
11           2018-10-21 20:48:52        04
12           2018-10-09 20:30:46        04
12           2018-10-09 20:30:22        04
12           2018-10-09 20:30:05        04
12           2018-10-09 20:29:44        05
12           2018-10-09 20:29:31        05
13           2018-10-19 18:49:08        06
13           2018-10-19 18:49:13        06
13           2018-10-11 18:46:15        07
14           2018-10-11 10:46:40        07

我尝试如下检测时间间隔:

df['col_new'] = (df['timestamp'].diff()).dt.seconds > 600

但是,我不明白如何应用反向填充来创建 ID。因此,如何检测时间间隔并为其分配新的 id?

【问题讨论】:

    标签: python python-3.x pandas datetime


    【解决方案1】:

    我相信你需要floorfactorize,最后加上zfill

    df['timestamp'] = pd.to_datetime(df['timestamp'])
    
    a = pd.factorize(df['timestamp'].dt.floor('10Min'))[0] + 1
    df['col_new'] = pd.Series(a, index=df.index).astype(str).str.zfill(2)
    
    print (df)
        Id           timestamp ID_2 col_new
    0   11 2018-10-19 13:00:00   01      01
    1   11 2018-10-19 13:05:00   01      01
    2   11 2018-10-19 13:06:00   01      01
    3   11 2018-10-19 13:07:00   01      01
    4   11 2018-10-19 13:30:00   02      02
    5   11 2018-10-19 13:31:00   02      02
    6   11 2018-10-19 13:32:00   02      02
    7   11 2018-10-19 13:55:00   03      03
    8   11 2018-10-19 13:54:00   03      03
    9   11 2018-10-21 20:47:09   04      04
    10  11 2018-10-21 20:48:27   04      04
    11  11 2018-10-21 20:48:45   04      04
    12  11 2018-10-21 20:48:52   04      04
    13  12 2018-10-09 20:30:46   04      05
    14  12 2018-10-09 20:30:22   04      05
    15  12 2018-10-09 20:30:05   04      05
    16  12 2018-10-09 20:29:44   05      06
    17  12 2018-10-09 20:29:31   05      06
    18  13 2018-10-19 18:49:08   06      07
    19  13 2018-10-19 18:49:13   06      07
    20  13 2018-10-11 18:46:15   07      08
    21  14 2018-10-11 18:46:40   07      08
    

    详情

    print (df['timestamp'].dt.floor('10Min'))
    0    2018-10-19 13:00:00
    1    2018-10-19 13:00:00
    2    2018-10-19 13:00:00
    3    2018-10-19 13:00:00
    4    2018-10-19 13:30:00
    5    2018-10-19 13:30:00
    6    2018-10-19 13:30:00
    7    2018-10-19 13:50:00
    8    2018-10-19 13:50:00
    9    2018-10-21 20:40:00
    10   2018-10-21 20:40:00
    11   2018-10-21 20:40:00
    12   2018-10-21 20:40:00
    13   2018-10-09 20:30:00
    14   2018-10-09 20:30:00
    15   2018-10-09 20:30:00
    16   2018-10-09 20:20:00
    17   2018-10-09 20:20:00
    18   2018-10-19 18:40:00
    19   2018-10-19 18:40:00
    20   2018-10-11 18:40:00
    21   2018-10-11 18:40:00
    Name: timestamp, dtype: datetime64[ns]
    

    【讨论】:

    • @PankajJoshi - 谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多