如何基于周度数据高效计算YTD变动值?
需求说明
我有如下周度数据表格:
| Date | A | B | C | D |
|---|---|---|---|---|
| 1/1/2022 | 4 | 5 | 5 | 2 |
| 1/7/2022 | 3 | 5 | 9 | 4 |
| 1/14/2022 | 4 | 8 | 5 | 6 |
| 1/21/2022 | 4 | 6 | 1 | 4 |
希望生成如下格式的YTD变动值表格,YTD变动值计算公式为:(当年最后一个值 - 当年第一个值) / 当年第一个值(基础百分比变动),求高效实现方案。
目标输出格式:
| Date | A | B | C | D |
|---|---|---|---|---|
| 2022 | x | x | x | x |
| 2021 | x | x | x | x |
| 2020 | x | x | x | x |
| 2019 | x | x | x | x |
方案1:Excel实现(适合入门用户)
- 提取年份:新增一列(如E列),在E2单元格输入公式
=YEAR(A2),下拉填充所有行,提取每条数据对应的年份。 - 获取每年首尾值:
- 若数据已按日期排序,可直接用
XLOOKUP函数提取:- 2022年A列第一个值:
=XLOOKUP(2022,YEAR(A:A),A:A,,0,1) - 2022年A列最后一个值:
=XLOOKUP(2022,YEAR(A:A),A:A,,0,-1)
- 2022年A列第一个值:
- 若数据未排序,使用「分类汇总」功能:先按年份分类,分别选择「最小值」「最大值」汇总A-D列,对应每年的首尾值。
- 若数据已按日期排序,可直接用
- 计算变动率:对每个列代入公式
(最后一个值 - 第一个值)/第一个值,将结果填入目标表格即可。
方案2:Python Pandas实现(适合批量/大数据处理)
如果需要处理多份数据或大样本量,用代码更高效:
- 读取并预处理数据:
import pandas as pd # 读取数据(支持Excel/CSV格式,替换为你的文件路径) df = pd.read_excel("周度数据.xlsx") # 将日期列转为标准格式 df['Date'] = pd.to_datetime(df['Date']) # 提取年份 df['Year'] = df['Date'].dt.year
- 分组获取首尾值并计算变动率:
# 按年份分组,取每组第一条(当年第一个值)和最后一条(当年最后一个值) first_vals = df.groupby('Year')[['A','B','C','D']].nth(0) last_vals = df.groupby('Year')[['A','B','C','D']].nth(-1) # 计算YTD变动率并整理格式 ytd_result = (last_vals - first_vals) / first_vals ytd_result = ytd_result.reset_index().rename(columns={'Year':'Date'})
- 输出结果:
# 打印表格 print(ytd_result) # 导出为Excel文件 ytd_result.to_excel("YTD变动值.xlsx", index=False)
内容的提问来源于stack exchange,提问作者Saanchi
相关产品推荐
相关产品推荐

