基于时间间隔与属性分组的Pandas车辆数据聚合及CSV导出需求
使用Pandas高效生成两类车型聚合CSV文件
原始数据集
import pandas as pd data = { 'timestamp': ['2022-11-03 00:00:06', '2022-11-03 00:00:33', '2022-11-03 00:00:35', '2022-11-03 00:00:46', '2022-11-03 00:01:21', '2022-11-03 00:01:30'], 'from': ['A', 'A', 'A', 'A', 'B', 'C'], 'to': ['B', 'B', 'B', 'C', 'C', 'B'], 'type': ['Car', 'Car', 'Van', 'Car', 'HGV', 'Van'] } df = pd.DataFrame(data)
需求说明
- 针对每种车型生成独立CSV:按15分钟时间间隔、
from列分组,统计车辆数量,不含to列; - 针对每种车型生成独立CSV:按15分钟时间间隔、
from+to列分组,统计车辆数量。
实现步骤
1. 数据预处理
先将timestamp转换为datetime类型并设置为索引,这是resample时间聚合的必要前提:
# 转换时间列格式为datetime df['timestamp'] = pd.to_datetime(df['timestamp']) # 设置时间列为数据索引 df = df.set_index('timestamp')
2. 生成第一类CSV(按15分钟+from分组)
遍历所有车型,对单车型数据做15分钟时间重采样,再按from字段聚合计数,最后导出为CSV:
# 遍历数据中所有车型 for vehicle_type in df['type'].unique(): # 筛选当前车型的数据集 type_subset = df[df['type'] == vehicle_type] # 按from分组+15分钟时间间隔统计数量 agg_result = type_subset.groupby('from').resample('15min').size().reset_index(name='vehicle_count') # 保存为CSV文件,命名规则:车型_15min_仅出发地统计.csv agg_result.to_csv(f'{vehicle_type}_15min_from_only.csv', index=False)
3. 生成第二类CSV(按15分钟+from+to分组)
逻辑和第一类一致,仅增加to字段作为分组维度:
# 遍历数据中所有车型 for vehicle_type in df['type'].unique(): # 筛选当前车型的数据集 type_subset = df[df['type'] == vehicle_type] # 按from+to分组+15分钟时间间隔统计数量 agg_result = type_subset.groupby(['from', 'to']).resample('15min').size().reset_index(name='vehicle_count') # 保存为CSV文件,命名规则:车型_15min_出发地目的地统计.csv agg_result.to_csv(f'{vehicle_type}_15min_from_to.csv', index=False)
补充说明
- 代码会自动识别数据中所有车型,即使后续新增车型(比如你提到的8种)也无需修改代码;
resample('15min')会自动按15分钟时间桶聚合,时间桶起始会对齐数据中最早的时间点;size()方法用于统计每组的记录数,对应实际车辆通行数量。
内容的提问来源于stack exchange,提问作者Roman Dostál
相关产品推荐
相关产品推荐

