如何计算数据的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
针对你的月度数据,具体步骤如下:
- 确定计算周期:选择需要计算CAGR的起始和结束时间点,提取对应的
preds值(比如从1998年1月到1999年3月,初值为18.21295,终值为17.32278)。 - 计算间隔年数:用结束时间与起始时间的天数差除以365.25(考虑闰年),得到精确的年数(比如1998-01-01到1999-03-01间隔424天,约1.16年)。
- 代入公式计算:将初值、终值和年数代入公式,得到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
相关产品推荐
相关产品推荐

