如何从DataFrame拆分date_time列并统计每日、每周访问高峰时段
Pandas统计每日及整周访问高峰时段方案
1. 提取时间维度字段
先从date_time中拆分出日期和时段(小时/自定义粒度),方便后续分组统计:
import pandas as pd # 提取日期(格式为YYYY-MM-DD的date对象) df['date'] = df['date_time'].dt.date # 提取小时作为时段(若需要更细粒度,比如30分钟,见下方注释) df['hour'] = df['date_time'].dt.hour # 可选:按30分钟粒度划分时段(格式如"10:00"、"10:30") # df['30min_slot'] = df['date_time'].dt.floor('30min').dt.strftime('%H:%M')
2. 统计每日访问高峰时段
通过分组聚合统计各时段访问量,再筛选出每日访问量最高的时段:
# 按日期+小时分组,统计每日各小时的访问次数 daily_hourly_visits = df.groupby(['date', 'hour']).size().reset_index(name='visit_count') # 方式1:仅取每日第一个访问量最高的时段 daily_peak_single = daily_hourly_visits.loc[daily_hourly_visits.groupby('date')['visit_count'].idxmax()] # 方式2:返回每日所有访问量并列最高的时段 max_daily_visits = daily_hourly_visits.groupby('date')['visit_count'].transform('max') daily_peak_all = daily_hourly_visits[daily_hourly_visits['visit_count'] == max_daily_visits]
3. 统计整周访问高峰时段
直接按时段分组统计整周总访问量,筛选出最高的时段:
# 按小时分组,统计整周各小时的总访问次数 weekly_hourly_visits = df.groupby('hour').size().reset_index(name='total_visits') # 方式1:仅取整周第一个访问量最高的时段 weekly_peak_single = weekly_hourly_visits.loc[weekly_hourly_visits['total_visits'].idxmax()] # 方式2:返回整周所有访问量并列最高的时段 max_weekly_visits = weekly_hourly_visits['total_visits'].max() weekly_peak_all = weekly_hourly_visits[weekly_hourly_visits['total_visits'] == max_weekly_visits]
说明
- 若需要更细的统计粒度(如15分钟),只需将提取时段的代码替换为
df['15min_slot'] = df['date_time'].dt.floor('15min').dt.strftime('%H:%M'),后续分组时用该字段即可。 groupby().size()用于统计每组的行数(即访问次数),如果你的DataFrame中一行代表一次访问,这个方法完全适用;如果一行是多条访问记录,需替换为groupby().agg({'visit_column': 'sum'}),其中visit_column是记录访问量的列名。
内容的提问来源于stack exchange,提问作者Guilherme Londero
相关产品推荐
相关产品推荐

