基于时间差的行分组:按5秒间隔对Datetime列分组
按5秒时间间隔对Datetime数据分组的实现方案
问题描述
现有一组字符串格式的时间数据,需按以下规则分组:若当前行与下一行的时间差≤5秒,则归为同一组;若时间差>5秒,则下一行开启新的分组编号。
原始数据
import pandas as pd d = {'dttm' : ['2023-01-30 09:02:42','2023-01-30 09:02:47','2023-01-30 09:02:48','2023-01-30 09:02:59', '2023-01-30 09:10:23','2023-01-30 09:10:27','2023-01-30 09:12:36','2023-01-30 09:14:13', '2023-01-30 09:14:15','2023-01-30 09:16:12','2023-01-30 09:16:12','2023-01-30 09:16:13']} dt_data = pd.DataFrame(d)
实现步骤
- 转换时间列类型:将字符串格式的
dttm列转为pandas的datetime类型,才能进行时间差计算。 - 计算相邻行时间差:用
diff()方法计算当前行与上一行的时间差,转为秒数后填充首行缺失值。 - 标记新分组:判断时间差是否大于5秒,生成新分组的标记。
- 生成分组编号:对新分组标记累加后加1,得到从1开始的分组编号。
完整代码
import pandas as pd d = {'dttm' : ['2023-01-30 09:02:42','2023-01-30 09:02:47','2023-01-30 09:02:48','2023-01-30 09:02:59', '2023-01-30 09:10:23','2023-01-30 09:10:27','2023-01-30 09:12:36','2023-01-30 09:14:13', '2023-01-30 09:14:15','2023-01-30 09:16:12','2023-01-30 09:16:12','2023-01-30 09:16:13']} dt_data = pd.DataFrame(d) # 转换为datetime类型 dt_data['dttm'] = pd.to_datetime(dt_data['dttm']) # 计算相邻行时间差(秒),填充首行缺失值为0 time_diff = dt_data['dttm'].diff().dt.total_seconds().fillna(0) # 标记需要开启新分组的行(时间差>5秒) new_group_flag = time_diff > 5 # 生成分组编号 dt_data['group'] = new_group_flag.cumsum() + 1
最终结果
| dttm | group |
|---|---|
| 2023-01-30 09:02:42 | 1 |
| 2023-01-30 09:02:47 | 1 |
| 2023-01-30 09:02:48 | 1 |
| 2023-01-30 09:02:59 | 2 |
| 2023-01-30 09:10:23 | 3 |
| 2023-01-30 09:10:27 | 3 |
| 2023-01-30 09:12:36 | 4 |
| 2023-01-30 09:14:13 | 5 |
| 2023-01-30 09:14:15 | 5 |
| 2023-01-30 09:16:12 | 6 |
| 2023-01-30 09:16:12 | 6 |
| 2023-01-30 09:16:13 | 6 |
内容的提问来源于stack exchange,提问作者user16016201
相关产品推荐
相关产品推荐

