订单日期格式处理与groupby按月分组可视化问题及产品类型预测需求
解决方案
一、修复日期索引的Datetime类型问题
1. 转换原始日期列为Datetime类型
先确保日期列(report)是真正的datetime类型,而非字符串。如果原数据是DD-MM-YY格式,执行以下代码:
import pandas as pd # 转换DD-MM-YY格式的日期字符串为datetime df['report'] = pd.to_datetime(df['report'], format='%d-%m-%y') # 若数据是示例中的YYYY-MM-DD格式,直接用下方代码 # df['report'] = pd.to_datetime(df['report'])
2. 按月分组并保留Datetime索引
不要将索引转为MM-YY字符串,用pd.Grouper按月份聚合,确保索引保持datetime类型,图表工具即可正常识别:
# 按月聚合所需指标(示例为订单数、总重量、总包裹数,可按需调整) monthly_summary = df.groupby(pd.Grouper(key='report', freq='M')).agg( total_orders=('order', 'count'), total_weight=('weight', 'sum'), total_pacs=('pacs', 'sum') ).reset_index() # 若需将日期显示为每月第一天,执行以下转换(仍保留datetime类型) monthly_summary['report'] = monthly_summary['report'].dt.to_period('M').dt.start_time
如果可视化时需要MM-YY格式的标签,只需在绘图时设置坐标轴格式,不要修改索引本身的类型。
二、按产品类型整理数据用于预测
假设数据包含product_type列,以下两种方式可快速整理出适合分析和预测的结构:
1. 使用透视表(Pivot Table)
# 创建按月份、产品类型聚合的透视表 product_monthly_pivot = pd.pivot_table( df, index=pd.Grouper(key='report', freq='M'), # 行:月份(datetime类型) columns='product_type', # 列:产品类型 values=['order', 'weight', 'pacs'], # 要聚合的指标 aggfunc='sum' # 聚合方式,可改为count等 ) # 填充缺失值(某月份无某产品订单时补0) product_monthly_pivot = product_monthly_pivot.fillna(0)
2. 使用Groupby + Unstack
这种方式更灵活,适合自定义聚合逻辑:
# 按月份和产品类型分组聚合 product_monthly = df.groupby([pd.Grouper(key='report', freq='M'), 'product_type']).agg( total_orders=('order', 'sum'), total_weight=('weight', 'sum') ).unstack('product_type') # 填充缺失值 product_monthly = product_monthly.fillna(0)
整理后的数据可直接用于时间序列预测(如ARIMA、Prophet等模型),因索引是正确的datetime类型,模型能识别时间顺序。
内容的提问来源于stack exchange,提问作者Aviran Marzouk
相关产品推荐
相关产品推荐

