Python按天聚合DataFrame:统计日行程数与平均行程时长
按天聚合行程数据:统计数量与平均时长
原始数据结构
trip_id date journey_duration weekday 0 913460 2019-08-31 00:13:00 Sat 1 913459 2019-08-31 00:17:00 Sat 2 913455 2019-08-31 00:05:00 Sat 3 913454 2019-08-31 00:07:00 Sat 4 913453 2019-08-31 00:13:00 Sat 5 913452 2019-08-31 00:05:00 Sat 6 913451 2019-08-31 00:15:00 Sat 7 913450 2019-08-31 00:04:00 Sat 8 913449 2019-08-31 00:03:00 Sat 9 913448 2019-08-31 00:15:00 Sat 10 913443 2019-08-31 00:12:00 Sat 11 913442 2019-08-31 00:10:00 Sat 12 913441 2019-08-31 00:07:00 Sat 13 913440 2019-08-31 00:05:00 Sat 14 913435 2019-08-31 00:08:00 Sat 15 913434 2019-08-31 00:05:00 Sat 16 913433 2019-08-31 00:03:00 Sat 17 913432 2019-08-31 00:12:00 Sat 18 913431 2019-08-31 00:10:00 Sat 19 913429 2019-08-31 00:15:00 Sat
需求与现有问题
需要按天聚合数据:
- 将
trip_id转换为每日行程数量 - 将
journey_duration转换为每日平均时长
现有代码仅能统计行程数,但会丢失journey_duration字段:
trip_data = (pd.to_datetime(trip_data['date']) .dt.floor('d') .value_counts() .rename_axis('date') .reset_index(name='count'))
正确解决方案
使用groupby+agg同时完成两个字段的聚合,步骤如下:
1. 预处理字段(若需要)
如果date不是datetime类型、journey_duration是字符串格式,先转换:
import pandas as pd # 将date转为datetime并按天取整 trip_data['date'] = pd.to_datetime(trip_data['date']).dt.floor('d') # 将journey_duration转为timedelta类型(若原数据是字符串) trip_data['journey_duration'] = pd.to_timedelta(trip_data['journey_duration'])
2. 按天聚合统计
# 按日期分组,同时统计行程数和平均时长 aggregated_data = trip_data.groupby('date').agg( daily_trip_count=('trip_id', 'count'), # 统计每日行程数 average_journey_duration=('journey_duration', 'mean') # 计算每日平均时长 ).reset_index()
代码说明
groupby('date'):以日期为分组依据agg():指定每个字段的聚合规则,同时给结果列设置易懂的别名reset_index():将date从索引列转为普通数据列,保持结构清晰
内容的提问来源于stack exchange,提问作者Senners
相关产品推荐
相关产品推荐

