首页 > 解决方案 > 使用python从日期时间列添加时间间隔列

问题描述

嗨,我有以下数据框:

assetReference  lastPositionUpdate
TAG20   2020-07-05 00:01:06
TAG20   2020-07-05 00:03:07
TAG20   2020-07-05 00:05:14
TAG20   2020-07-05 00:07:15
TAG20   2020-07-05 00:09:22
TAG20   2020-07-05 00:11:30
TAG20   2020-07-05 00:13:31
TAG20   2020-07-05 00:15:39
TAG20   2020-07-05 00:17:47
TAG20   2020-07-05 00:19:54
TAG20   2020-07-05 00:21:55
TAG20   2020-07-05 00:24:03
TAG20   2020-07-05 00:26:11
TAG20   2020-07-05 00:28:18
TAG20   2020-07-05 00:30:27
TAG20   2020-07-05 00:32:34
TAG20   2020-07-05 00:34:43
TAG20   2020-07-05 00:36:50
TAG20   2020-07-05 00:38:58

我想添加与每一行相关联的相应时间间隔的列,如下所示:

lastPositionUpdate   => Time interval

05/07/2020  00:01:06 => 00:00:00-00:02:00
05/07/2020  00:03:07 => 00:02:00-00:04:00
05/07/2020  00:05:14 => 00:04:00-00:06:00

时间间隔等于 2 分钟,从 00:00:00-00:00:02 到 00:58:00-00:00:00

我是 python 新手。你能帮我吗

标签: pythonpandasdatetime

解决方案


使用与您的数据相似的数据构造一个 DataFrame:

import pandas as pd
df = pd.DataFrame([
        ['TAG20', '2020-07-05 00:01:06'],
        ['TAG20', '2020-07-05 00:03:07'],
        ['TAG20', '2020-07-05 00:05:14'],
        ['TAG20', '2020-07-05 00:07:15'],
        ['TAG20', '2020-07-05 00:09:22'],
        ['TAG20', '2020-07-05 00:11:30'],
    ],
    columns=['_source.tag.assetReference', '_source.tag.location.lastPositionUpdate']
)
df.loc[:, '_source.tag.location.lastPositionUpdate'] = pd.to_datetime(df['_source.tag.location.lastPositionUpdate'])

我们可以像这样添加一个具有间隔的列:

temp = df.assign(
    low=df['_source.tag.location.lastPositionUpdate'].dt.floor('2min'), 
    high=df['_source.tag.location.lastPositionUpdate'].dt.ceil('2min')
)
df.loc[:, 'interval'] = temp.apply(lambda row: pd.Interval(row['low'], row['high']), axis=1)

这可能不是最快的方法,但它确实有效:

    _source.tag.assetReference  _source.tag.location.lastPositionUpdate interval
0   TAG20   2020-07-05 00:01:06 (2020-07-05, 2020-07-05 00:02:00]
1   TAG20   2020-07-05 00:03:07 (2020-07-05 00:02:00, 2020-07-05 00:04:00]
2   TAG20   2020-07-05 00:05:14 (2020-07-05 00:04:00, 2020-07-05 00:06:00]
3   TAG20   2020-07-05 00:07:15 (2020-07-05 00:06:00, 2020-07-05 00:08:00]
4   TAG20   2020-07-05 00:09:22 (2020-07-05 00:08:00, 2020-07-05 00:10:00]
5   TAG20   2020-07-05 00:11:30 (2020-07-05 00:10:00, 2020-07-05 00:12:00]

推荐阅读