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

如何用Python分析销售数据统计销售高峰时段与最活跃星期

实现方案

1. 时间字段预处理

先一次性提取需要的小时、星期维度字段,避免后续重复处理:

import pandas as pd
import matplotlib.pyplot as plt

# 转换交易时间为标准时间格式
Order_Details['Time'] = pd.to_datetime(Order_Details['Transaction Date'])
# 提取小时字段(0-23对应全天24小时)
Order_Details['Hour'] = Order_Details['Time'].dt.hour
# 提取星期字段,映射为中文星期名
weekday_map = {0:'周一', 1:'周二', 2:'周三', 3:'周四', 4:'周五', 5:'周六', 6:'周日'}
Order_Details['Weekday'] = Order_Details['Time'].dt.weekday.map(weekday_map)

2. 按小时升序统计交易频次

value_counts()默认按频次降序返回结果,只要对结果按索引排序,同时补全0-23点全时段(避免无交易时段缺失导致X轴断档),就能得到符合要求的序列,再拆分出两个独立列表即可:

# 统计各小时交易数,按0-23点顺序排列,无交易的小时频次填0
hour_counts = Order_Details['Hour'].value_counts().reindex(range(24), fill_value=0)
# 拆分得到小时列表、对应交易频次列表
hour_list = hour_counts.index.tolist()
hour_freq_list = hour_counts.values.tolist()

如果需要定位最活跃的小时,直接取hour_counts.idxmax()就能得到对应小时值,hour_counts.max()得到对应最高交易频次。

3. 按星期自然顺序统计交易频次

星期统计需要固定周一到周日的顺序,避免按字符排序打乱自然周周期:

# 定义周一到周日的固定顺序
weekday_order = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
# 统计各星期交易数,按自然周顺序排列
weekday_counts = Order_Details['Weekday'].value_counts().reindex(weekday_order, fill_value=0)
# 拆分得到星期列表、对应交易频次列表
weekday_list = weekday_counts.index.tolist()
weekday_freq_list = weekday_counts.values.tolist()

同理,weekday_counts.idxmax()可以直接得到一周内交易最活跃的星期。

4. 可视化实现

用柱状图展示离散时段的交易频次最直观,示例代码如下:

# 绘制小时维度交易频次图
plt.figure(figsize=(12, 5))
plt.bar(hour_list, hour_freq_list, color='#2E86AB')
plt.title('全天各小时交易频次分布')
plt.xlabel('小时(24小时制)')
plt.ylabel('交易笔数')
plt.xticks(range(24))
plt.grid(axis='y', alpha=0.3)
plt.show()

# 绘制星期维度交易频次图
plt.figure(figsize=(10, 5))
plt.bar(weekday_list, weekday_freq_list, color='#A23B72')
plt.title('一周各天交易频次分布')
plt.xlabel('星期')
plt.ylabel('交易笔数')
plt.grid(axis='y', alpha=0.3)
plt.show()

可选:小时分段统计

如果需要按时间段(而非单小时)统计,可以用分箱实现:

# 自定义时段区间和标签
bins = [0, 6, 10, 14, 18, 22, 24]
period_labels = ['凌晨0-6点', '早间6-10点', '上午10-14点', '下午14-18点', '晚间18-22点', '夜间22-24点']
Order_Details['Time_Segment'] = pd.cut(Order_Details['Hour'], bins=bins, labels=period_labels, right=False)
# 按自定义时段顺序统计
segment_counts = Order_Details['Time_Segment'].value_counts().reindex(period_labels, fill_value=0)

内容的提问来源于stack exchange,提问作者Priyanshu Mohanty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:06:22