如何将DataFrame数据按3小时时间序列分组至最近后续时间点
实现方法
步骤1:将时间序列转为datetime类型
首先把生成的字符串格式时间序列转换为Pandas的datetime类型,方便后续时间匹配:
import pandas as pd # 原生成的字符串时间序列 timeSeries = pd.date_range("2021-05-18", "2022-05-19", freq="3H").strftime('%Y-%m-%d %H:%M:%S') # 转为datetime类型 time_series_dt = pd.to_datetime(timeSeries)
步骤2:确保DataFrame索引为datetime格式
检查并转换你的DataFrame索引为datetime类型(如果还不是的话):
# 转换索引为datetime格式 df.index = pd.to_datetime(df.index)
步骤3:匹配最近的后续时间节点
使用searchsorted方法,通过side='right'参数找到每个索引对应的第一个大于当前时间的序列节点,也就是最近的后续时间点:
# 获取每个索引对应的后续时间点位置 match_indices = time_series_dt.searchsorted(df.index, side='right') # 将匹配到的时间点添加为DataFrame的新列 df['group_time'] = time_series_dt[match_indices]
步骤4:按匹配的时间节点分组
现在可以直接按新添加的group_time列进行分组操作,比如统计每个分组的ID数量:
# 按分组时间聚合数据 grouped_data = df.groupby('group_time') # 示例:查看每个分组的ID数量 print(grouped_data['ID'].count())
说明
searchsorted(side='right')会返回第一个大于目标值的元素位置,正好满足“最近的后续时间节点”的需求,比如示例中的2021-05-18 23:49:02会匹配到2021-05-19 00:00:00(注:原代码中strftime生成的24:00:00实际会被Pandas解析为次日的00:00:00,属于正常的时间格式转换)。
内容的提问来源于stack exchange,提问作者Julian Saadon
相关产品推荐
相关产品推荐

