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

如何在Python的Pandas中获取年初至今(YTD)数据?

在Pandas中计算年初至今(YTD)销量并绘制柱状图

数据预处理

首先确保日期列是datetime类型,这是后续时间操作的基础:

import pandas as pd
import matplotlib.pyplot as plt

# 加载本地数据集
df = pd.read_csv('superstore_dataset_final.csv')
# 转换日期列为datetime格式
df['date'] = pd.to_datetime(df['date'])

计算单年份YTD销量

如果只需要某一年的年初至今数据(比如最新年份):

# 取数据中的最新年份
target_year = df['date'].dt.year.max()
# 筛选该年份的数据
year_data = df[df['date'].dt.year == target_year].copy()

# 按日期排序,先聚合每日总销量(避免同一天多条记录重复计算)
daily_sales = year_data.groupby(year_data['date'].dt.date)['Sales'].sum().reset_index()
# 计算YTD累计销量
daily_sales['ytd_sales'] = daily_sales['Sales'].cumsum()

计算多年份YTD对比数据

如果需要对比不同年份的同期YTD累计销量:

# 提取月日作为统一的日期标识(忽略年份)
df['month_day'] = df['date'].dt.strftime('%m-%d')

# 按年份和月日分组计算每日销量,再按年份累计得到YTD数据
ytd_by_year = df.groupby([df['date'].dt.year, 'month_day'])['Sales'].sum()
ytd_by_year = ytd_by_year.groupby(level=0).cumsum().unstack(level=0)

绘制柱状图

单年份销量与YTD累计图

plt.figure(figsize=(12, 6))
# 每日销量柱状图
plt.bar(daily_sales['date'], daily_sales['Sales'], alpha=0.7, label='每日销量')
# YTD累计销量折线图
plt.plot(daily_sales['date'], daily_sales['ytd_sales'], color='#ff4444', linewidth=2, label='YTD累计销量')

plt.xlabel('日期')
plt.ylabel('销量')
plt.title(f'{target_year}年年初至今销量统计')
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()
plt.show()

多年份YTD累计对比柱状图

plt.figure(figsize=(12, 6))
ytd_by_year.plot(kind='bar', ax=plt.gca())

plt.xlabel('月日')
plt.ylabel('YTD累计销量')
plt.title('各年份年初至今累计销量对比')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

你的原代码问题说明

  • 分组顺序错误:应该先按年份,再按月日,否则unstack后的数据结构会混乱,无法正确累计
  • 列名错误:你用了distance.sum(),但该数据集的销量列是Sales
  • 累计逻辑错误:需要按年份分组后再执行cumsum(),否则会跨年份累计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:53:11