如何在Pandas中从时间戳列生成5分钟间隔的起止时间列?
Pandas生成5分钟时间间隔的起始/结束列
原始数据集
data = {'col_ts': ['2022-11-02T08:26:40', '2022-11-02T08:25:10', '2022-11-02T08:26:00', '2022-11-02T08:30:20', '2022-11-02T08:33:30', '2022-11-02T08:36:40', '2022-11-02T08:26:20', '2022-11-02T08:50:10', '2022-11-02T08:30:40', '2022-11-02T08:39:40']} df = pd.DataFrame(data, columns = ['col_ts'])
需求说明
需要为每条数据生成对应5分钟时间间隔的起始时间(START_INTERVAL)和结束时间(END_INTERVAL),效果等价于SQL中的time_slice(col_ts, 5, 'MINUTE', 'START')和time_slice(col_ts, 5, 'MINUTE', 'END')。Pandas的resample方法仅能生成聚合后的行级间隔,无法为每条原始数据匹配对应间隔,可通过以下方案实现。
解决方案
步骤1:转换时间列为datetime类型
原始col_ts是字符串格式,需先转为Pandas的datetime类型才能进行时间运算:
df['col_ts'] = pd.to_datetime(df['col_ts'])
步骤2:生成起始时间列(START_INTERVAL)
使用dt.floor('5T')将时间向下取整到最近的5分钟间隔起点,和SQLtime_slice的START逻辑一致:
df['START_INTERVAL'] = df['col_ts'].dt.floor('5T')
步骤3:生成结束时间列(END_INTERVAL)
结束时间为起始时间加上5分钟,直接用pd.Timedelta实现:
df['END_INTERVAL'] = df['START_INTERVAL'] + pd.Timedelta(minutes=5)
完整代码
import pandas as pd data = {'col_ts': ['2022-11-02T08:26:40', '2022-11-02T08:25:10', '2022-11-02T08:26:00', '2022-11-02T08:30:20', '2022-11-02T08:33:30', '2022-11-02T08:36:40', '2022-11-02T08:26:20', '2022-11-02T08:50:10', '2022-11-02T08:30:40', '2022-11-02T08:39:40']} df = pd.DataFrame(data, columns = ['col_ts']) # 转换时间类型 df['col_ts'] = pd.to_datetime(df['col_ts']) # 生成起始间隔 df['START_INTERVAL'] = df['col_ts'].dt.floor('5T') # 生成结束间隔 df['END_INTERVAL'] = df['START_INTERVAL'] + pd.Timedelta(minutes=5) print(df)
输出结果
col_ts START_INTERVAL END_INTERVAL 0 2022-11-02 08:26:40 2022-11-02 08:25:00 2022-11-02 08:30:00 1 2022-11-02 08:25:10 2022-11-02 08:25:00 2022-11-02 08:30:00 2 2022-11-02 08:26:00 2022-11-02 08:25:00 2022-11-02 08:30:00 3 2022-11-02 08:30:20 2022-11-02 08:30:00 2022-11-02 08:35:00 4 2022-11-02 08:33:30 2022-11-02 08:30:00 2022-11-02 08:35:00 5 2022-11-02 08:36:40 2022-11-02 08:35:00 2022-11-02 08:40:00 6 2022-11-02 08:26:20 2022-11-02 08:25:00 2022-11-02 08:30:00 7 2022-11-02 08:50:10 2022-11-02 08:50:00 2022-11-02 08:55:00 8 2022-11-02 08:30:40 2022-11-02 08:30:00 2022-11-02 08:35:00 9 2022-11-02 08:39:40 2022-11-02 08:35:00 2022-11-02 08:40:00
内容的提问来源于stack exchange,提问作者CK-P
相关产品推荐
相关产品推荐

