如何在Pandas中按相邻时间戳间隔小于1秒分组数据?
解决方法
核心思路是通过相邻时间戳的差值判断分组边界,生成自定义分组标签后再进行聚合,具体步骤如下:
1. 准备示例数据
先构造符合需求的测试数据(Timestamp列需为datetime64类型):
import pandas as pd timestamps = pd.to_datetime([ '2024-01-01 00:00:01.1', '2024-01-01 00:00:01.8', '2024-01-01 00:00:02.4', '2024-01-01 00:00:05.0', '2024-01-01 00:00:05.9', '2024-01-01 00:00:09.0' ]) df = pd.DataFrame({'Timestamp': timestamps, 'Value': [1, 2, 3, 4, 5, 6]})
2. 生成自定义分组标签
计算相邻时间戳的秒级差值,标记需要开启新分组的位置,再通过累加得到唯一分组ID:
# 计算相邻时间戳的秒数差 time_diff = df['Timestamp'].diff().dt.total_seconds() # 标记新分组起始:差值≥1秒 或 第一行 new_group = time_diff >= 1 new_group.iloc[0] = True # 第一行强制作为第一个分组的起点 # 生成连续的分组ID group_ids = new_group.cumsum()
3. 分组聚合并设置目标索引
按生成的分组ID聚合,指定每组的第一个Timestamp作为结果索引,同时按需处理其他列的聚合逻辑:
# 分组聚合,这里以求和Value列为例,可根据需求替换agg内的逻辑 result = df.groupby(group_ids).agg( Timestamp=('Timestamp', 'first'), Total_Value=('Value', 'sum') ).set_index('Timestamp') print(result)
输出结果:
Total_Value Timestamp 2024-01-01 00:00:01.1 6 2024-01-01 00:00:05.0 9 2024-01-01 00:00:09.0 6
关键说明
- 该方法完全基于相邻行的时间差判断分组,不受固定时间边界限制,完美匹配需求中的分组逻辑。
- 如果
Timestamp列不是datetime类型,需要先通过pd.to_datetime()转换。 - 聚合逻辑可根据实际需求调整,比如替换
sum为mean、max或自定义函数。
内容的提问来源于stack exchange,提问作者A1122
相关产品推荐
相关产品推荐

