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

按周/月间隔展示销售数据遇异常:图表绘制问题求助

问题解决步骤

核心问题

你把日期转成了字符串格式(DD-MM-YYYY),导致pandas无法识别为时间序列,resample自然无法按时间间隔正确聚合;直接绘图拥挤是因为原始数据时间点太密集,需要先聚合到周/月级别。


步骤1:修复日期类型

首先确保Date列是datetime64类型,而非字符串:

  • 若还未转换日期,直接保留datetime对象:
# 转换YYYY-WW为datetime,不转成字符串
data['Date'] = data['Date'].apply(lambda x: week_to_date(x))
  • 若已转成字符串,再转回datetime:
import pandas as pd
# 按DD-MM-YYYY格式解析字符串为datetime
data['Date'] = pd.to_datetime(data['Date'], format='%d-%m-%Y')

步骤2:正确时间聚合

设置datetime索引后,用resample按周/月聚合,注意选对聚合函数(销量用sum而非count——count是统计非空行数,不是销量总和):

# 设置datetime索引
data.set_index('Date', inplace=True)

# 按周聚合销量(求和)
weekly_data = data.resample('W')['Sales Volume'].sum()

# 按月聚合销量(求和)
monthly_data = data.resample('M')['Sales Volume'].sum()

步骤3:绘制清晰的图表

聚合后的数据点稀疏,不会拥挤,同时优化x轴显示:

import matplotlib.pyplot as plt

# 绘制周销量图表
plt.figure(figsize=(12, 6))
plt.plot(weekly_data.index, weekly_data, label='Weekly Sales', marker='o', linestyle='-')
plt.xlabel('Date')
plt.ylabel('Sales Volume')
plt.title('Weekly Sales Volume')
plt.xticks(rotation=45)  # 旋转x轴标签,避免重叠
plt.legend()
plt.tight_layout()  # 自动调整布局,防止标签被截断
plt.show()

# 绘制月销量图表
plt.figure(figsize=(12, 6))
plt.plot(monthly_data.index, monthly_data, label='Monthly Sales', marker='s', linestyle='--', color='orange')
plt.xlabel('Date')
plt.ylabel('Sales Volume')
plt.title('Monthly Sales Volume')
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()
plt.show()

常见误区说明

  1. resample只认datetime索引:字符串索引会被当成普通类别,无法按时间间隔分组
  2. 聚合函数要匹配场景:销量数据用sum累加,求平均值用mean,count仅用于统计数据行数,不适合销量计算
  3. 图表拥挤的本质:原始数据时间点过多,聚合到周/月后每个间隔仅一个数据点,自然不会拥挤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:03:28