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

基于Pandas计算CSV日度累积销量时间序列的月度销量(Max-Min)

解决每日累积销量转月度销量的方案

嘿,这个需求我太熟了——从每日累积销量的CSV里算出每年每个月的实际销量(当月累积最大值减最小值),还要把过去5年同月份的数据放在一起对比对吧?用Python的pandas库处理这种时间序列数据简直是量身定做,我给你捋具体步骤和代码:

第一步:数据读取与预处理

首先得把CSV里的数据读进来,并且把日期列转换成pandas能识别的时间格式,这样才能方便按年按月分组:

  • 假设你的CSV文件包含日期时间和累积销量两列,列名比如是datetime和cumulative_sales
  • 读取时指定parse_dates参数把日期列转成datetime类型,同时因为你的日期是DD-MM-YYYY格式,要加上dayfirst=True避免解析错误

第二步:提取年份和月份

为了后续分组,我们需要从datetime字段里把年份和月份单独提出来:

  • 用dt.year提取年份,dt.month提取月份(或者用dt.month_name()得到月份名称,比如"January",看你需求)

第三步:分组计算月度销量

核心就是按「年份+月份」分组,然后对每组的累积销量计算最大值减最小值——因为累积销量是逐日递增的,当月最后一天的累积值减第一天的就是当月实际销量,用max和min更稳妥(万一数据顺序乱了也不怕)

完整代码示例

import pandas as pd

# 读取CSV文件,替换成你的文件路径和实际列名
df = pd.read_csv('your_sales_data.csv', parse_dates=['datetime'], dayfirst=True)

# 提取年份和月份列
df['year'] = df['datetime'].dt.year
df['month'] = df['datetime'].dt.month

# 分组计算每个月的实际销量:当月累积最大值 - 最小值
monthly_sales = df.groupby(['year', 'month'])['cumulative_sales'].agg(
    monthly_sold=lambda x: x.max() - x.min()
).reset_index()

# 整理成宽表:每行是月份,每列是年份,方便查看同月份的5年数据
monthly_summary = monthly_sales.pivot(
    index='month', 
    columns='year', 
    values='monthly_sold'
)

# 可选:把月份数字转成英文名称(比如1→January),更直观
monthly_summary.index = pd.to_datetime(monthly_summary.index, format='%m').strftime('%B')

# 打印结果或者保存到CSV
print(monthly_summary)
# monthly_summary.to_csv('monthly_sales_summary.csv')

一些注意事项

  • 如果你的CSV列名不是datetime和cumulative_sales,一定要替换成你实际的列名
  • 如果数据里有缺失的日期(比如某天没记录),可以先用df = df.resample('D', on='datetime').ffill()来填充累积销量,确保每个日期都有数据,避免分组时出现错误
  • 代码里的monthly_sold是自定义的结果列名,你可以改成自己喜欢的名字

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:46