Python中如何为DataFrame生成year_month列并按月分组统计
实现步骤
你已经将Date列处理为datetime格式,后续操作可以直接基于pandas的日期接口完成,不需要额外做格式转换。
- 第一步:新增
Year_Month列
使用dt.strftime()方法直接格式化日期列,指定格式为%m-%Y即可自动生成两位月份+四位年份的字符串,个位数月份会自动补前导零,完全匹配你需要的03-2022类格式:
df['Year_Month'] = df['Date'].dt.strftime('%m-%Y')
执行完这行代码后,你的DataFrame结构就会和你给出的期望结构完全一致。
- 第二步:按月度分组统计价格
根据你的绘图需求,可以按Year_Month字段分组聚合价格数据,如果需要统计全品类月度平均售价,使用如下代码即可:
# 全品类月度平均价 monthly_price_stats = df.groupby('Year_Month', as_index=False)['Price'].mean()
如果需要拆分统计不同商品各自的月度价格变化,可以把商品名也加入分组键:
# 分商品的月度价格统计 monthly_price_by_item = df.groupby(['Year_Month', 'Item'], as_index=False)['Price'].mean()
注意:如果你的数据跨度超过1年,不要直接用字符串格式的
Year_Month做排序,否则会出现跨年月份顺序错乱的问题,可以临时用df['Date'].dt.to_period('M')生成的年月周期类型做排序依据,排序完成后再做可视化即可。
- 第三步:绘制月度价格变化图
基于聚合后的月度统计数据,用matplotlib即可快速绘制趋势图,基础示例代码如下:
import matplotlib.pyplot as plt plt.figure(figsize=(10, 6)) plt.plot(monthly_price_stats['Year_Month'], monthly_price_stats['Price'], marker='o', linewidth=2) plt.title('杂货月度平均价格变化趋势') plt.xlabel('统计月份') plt.ylabel('平均售价') plt.grid(alpha=0.3) plt.show()
内容的提问来源于stack exchange,提问作者Madsp
相关产品推荐
相关产品推荐

