You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas和datetime在Jupyter中统计从未产生销量的时段(小时/分钟)

解决方案

前置修正:保留原始订单级时间数据

你之前的操作里把存储单条订单时间的time_df直接覆盖为了按月聚合的统计结果,后续无法基于单条订单的原始时间做时段统计,需要先保留原始数据:

import pandas as pd

# 原始导入&清洗逻辑
df = pd.read_excel('Audit Period.xlsx')
# 保留非空的订单时间,不提前做聚合
raw_time_df = df[df["Order Date Time"].notnull()][["Order Date Time"]].reset_index(drop=True)
# 转换为datetime格式
raw_time_df["Order Date Time"] = pd.to_datetime(raw_time_df["Order Date Time"])

需求1:统计所有日期相同时段的总销量,找到销量最高的时段

用datetime的dt属性提取时段维度分组,不要用resample(resample是按连续时间序列拆分,会把不同日期的相同时段分开统计):

# 统计单小时维度的全日期总销量
raw_time_df['hour'] = raw_time_df['Order Date Time'].dt.hour
hourly_total = raw_time_df.groupby('hour').size().reset_index(name='sales_count')
# 输出销量最高的小时
top_sales_hour = hourly_total.sort_values('sales_count', ascending=False).iloc[0]
print(f"销量最高的时段:{top_sales_hour['hour']}点,总销量{top_sales_hour['sales_count']}")

# 如果需要统计2小时粒度的时段,用以下代码
raw_time_df['2h_period'] = (raw_time_df['hour'] // 2) * 2
two_hour_total = raw_time_df.groupby('2h_period').size().reset_index(name='sales_count')

需求2:筛选从未产生销量的分钟级时间段

先生成统计范围内的完整分钟时间序列,再和有销量的分钟做差集即可:

# 确定统计的时间边界:取所有订单的最早、最晚时间
start_time = raw_time_df['Order Date Time'].min().floor('min')
end_time = raw_time_df['Order Date Time'].max().ceil('min')

# 生成该时间范围内的完整分钟级时间序列
full_minute_range = pd.date_range(start=start_time, end=end_time, freq='T')

# 提取所有产生过销量的分钟(把秒部分抹掉统一精度)
sales_minutes = raw_time_df['Order Date Time'].dt.floor('min').unique()

# 取差集得到无销量的分钟
no_sales_minutes = full_minute_range[~full_minute_range.isin(sales_minutes)]

# 可以转为DataFrame导出
no_sales_df = pd.DataFrame(no_sales_minutes, columns=['no_sales_minute'])
no_sales_df.to_excel('no_sales_minutes.xlsx', index=False)

内容的提问来源于stack exchange,提问作者Andrew Leahey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:06:04