如何计算4小时时间跨度内平均完成的骑行订单数?Pandas代码调试求助
先帮你梳理下当前遇到的核心问题,再给出清晰的实现步骤:
问题1:方案1的报错根源
你碰到的Dataframe object has no attribute dropoff_date_time错误,是因为你的数据集列名是ride_completion_time,但代码里误用了不存在的dropoff_date_time(从你给出的dtypes来看,可能你实际列名是dropoff_datetime?这里一定要保证列名完全一致)。另外,mean()方法对ride_id(object类型)没有意义——你需要的是统计订单数量而非求均值。
问题2:方案2的求和/均值失效原因
方案2里用sum()对ride_id(字符串类型)求和完全无效,因为字符串无法直接做求和运算;而且pandas里没有average方法,正确的均值方法是mean(),但前提是你得先拿到分组后的有效订单计数。
正确的实现步骤
假设你的时间列实际名为ride_completion_time(如果是dropoff_datetime,替换成对应列名即可),按以下步骤操作:
1. 按4小时时间窗口分组,统计每个窗口的订单数量
用dt.floor('4H')把时间向下取整到最近的4小时整点,然后对ride_id进行计数(每个ride_id对应一个独立订单):
# 按4小时时间窗口分组,统计每组的订单数量 hourly_order_counts = df3.groupby(df3['ride_completion_time'].dt.floor('4H'))['ride_id'].count()
执行后会得到一个Series:索引是4小时间隔的时间戳,值是对应时间段内的订单数。
2. 计算分组订单数的平均值
拿到每个4小时窗口的订单数后,直接用mean()计算平均值,这就是你要的“4小时时间跨度内平均完成的骑行订单数量”:
avg_4h_rides = hourly_order_counts.mean() print(f"4小时跨度内平均完成的骑行订单数:{avg_4h_rides}")
补充:查看每个4小时窗口的具体订单数
直接打印hourly_order_counts就能看到各时间段的订单分布,比如你的示例数据会输出:
ride_completion_time 2022-08-23 16:00:00 1 2022-08-24 04:00:00 1 2022-08-27 00:00:00 2 2022-08-28 20:00:00 1 Name: ride_id, dtype: int64
对应的平均值就是(1+1+2+1)/4 = 1.25。
最后提醒:你的数据集列名(ride_completion_time)和dtypes输出的列名(dropoff_datetime)不一致,一定要先确认实际列名,避免因名称不匹配导致的报错。
内容的提问来源于stack exchange,提问作者Maggie Liu

