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

如何用Python计算以当前年度为基准的复利通胀率?

计算以当前年度为基准的复利通胀率的Python简洁方案

核心需求

已知各年度的同比通胀率(yoy_inflation,已转换为1+通胀率的乘数形式,如4.8%对应1.048),计算从当前年度到基准年(示例中为2022年,对应数据里最新的2021年)的复利通胀率——即当前年度及之后所有年度同比通胀率的累积乘积。


方案1:Pandas(表格数据首选)

如果数据以DataFrame形式存储,直接使用cumprod()方法即可实现累积乘积计算,完全匹配需求:

import pandas as pd

# 构造示例数据(年份按降序排列:最新年份在前)
data = {
    'year': [2021, 2020, 2019, 2018, 2017, 2016],
    'yoy_inflation': [1.048, 1.008, 1.014, 1.02, 1.027, 1.018]
}
df = pd.DataFrame(data)

# 计算复利通胀率,保留3位小数与示例对齐
df['compound_inflation_to_2022'] = df['yoy_inflation'].cumprod().round(3)

print(df)

关键说明:

  • cumprod()会从第一个元素开始,依次计算到当前行的累积乘积,正好对应示例逻辑:2021年取自身值,2020年取2020×2021的乘积,以此类推。
  • 如果原始数据是年份升序(最早年份在前),需先排序:df = df.sort_values('year', ascending=False),计算后可再按需排序回去。

方案2:纯Python列表(无依赖场景)

若使用普通列表存储数据,可借助itertools.accumulate()实现高效的累积乘积计算:

import operator
from itertools import accumulate

# 同比通胀率列表(按年份降序排列)
yoy_inflation = [1.048, 1.008, 1.014, 1.02, 1.027, 1.018]

# 计算累积乘积,转为列表并保留3位小数
compound_inflation = [round(val, 3) for val in accumulate(yoy_inflation, operator.mul)]

print(compound_inflation)
# 输出:[1.048, 1.056, 1.071, 1.093, 1.122, 1.142]

关键说明:

  • accumulate()默认做加法累积,传入operator.mul指定为乘法累积,生成的迭代器会逐个输出到当前位置的累积乘积。
  • 同样需要保证列表是最新年份在前的顺序,若顺序相反,可先反转列表:yoy_inflation = yoy_inflation[::-1],计算后再反转结果。

注意事项

  • 确保同比通胀率是乘数形式:若原始数据是百分比(如4.8%),需先转换为1 + 百分比/100。
  • 累积乘积的精度可根据需求调整round()的参数,或直接保留原始浮点值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:55:19