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

如何计算数据的Compound Annual Growth Rate?求方法或工具函数

计算preds列复合年增长率的最优方法与工具函数

问题描述

尝试计算以下数据中preds列的复合年增长率(CAGR),想知道最优计算方法及可用的辅助工具函数。

数据(仅关注preds列):

year month timestep     ymin     ymax          preds       date
1   1998     1        1 17.84037 18.58553      18.21295 1998-01-01
2   1998     2        2 17.05009 17.70642      17.37826 1998-02-01
3   1998     3        3 16.97067 17.61320      17.29193 1998-03-01
4   1998     4        4 18.38551 19.00838      18.69695 1998-04-01
5   1998     5        5 21.39082 21.97338      21.68210 1998-05-01
6   1998     6        6 24.77679 25.35464      25.06571 1998-06-01
7   1998     7        7 27.27057 27.82818      27.54938 1998-07-01
8   1998     8        8 28.24703 28.76702      28.50702 1998-08-01
9   1998     9        9 27.72370 28.24619      27.98494 1998-09-01
10  1998    10       10 25.83783 26.33969      26.08876 1998-10-01
11  1998    11       11 22.94968 23.42268      23.18618 1998-11-01
12  1998    12       12 19.50499 20.05466      19.77982 1998-12-01
13  1999     1       13 17.98323 18.50530      18.24426 1999-01-01
14  1999     2       14 17.20124 17.61746      17.40935 1999-02-01
15  1999     3       15 17.11064 17.53492      17.32278 1999-03-01 

最优计算方法

复合年增长率的核心公式为:
CAGR = (终值 / 初值) ^ (1 / 年数) - 1

针对你的月度数据,具体步骤如下:

  1. 确定计算周期:选择需要计算CAGR的起始和结束时间点,提取对应的preds值(比如从1998年1月到1999年3月,初值为18.21295,终值为17.32278)。
  2. 计算间隔年数:用结束时间与起始时间的天数差除以365.25(考虑闰年),得到精确的年数(比如1998-01-01到1999-03-01间隔424天,约1.16年)。
  3. 代入公式计算:将初值、终值和年数代入公式,得到CAGR结果。

注意:如果是计算年度维度的CAGR,建议取每年年末的preds值进行计算,避免月度波动影响结果。

辅助工具函数

Python 自定义函数

可以写一个通用的CAGR计算函数,适配不同场景:

def calculate_cagr(start_val, end_val, years):
    if start_val <= 0:
        raise ValueError("起始值必须大于0")
    return (end_val / start_val) ** (1 / years) - 1

Pandas 批量处理

如果用Pandas处理数据集,可结合时间序列操作快速计算:

import pandas as pd

# 假设数据已加载到DataFrame df中
df['date'] = pd.to_datetime(df['date'])

# 提取起始和结束值
start_date = '1998-01-01'
end_date = '1999-03-01'
start_val = df.loc[df['date'] == start_date, 'preds'].iloc[0]
end_val = df.loc[df['date'] == end_date, 'preds'].iloc[0]

# 计算间隔年数
years = (pd.to_datetime(end_date) - pd.to_datetime(start_date)).days / 365.25

# 计算CAGR
cagr = calculate_cagr(start_val, end_val, years)
print(f"复合年增长率: {cagr:.2%}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:25:29