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

如何对资本应用递减率并估算2050年前各公司未来资本值

计算至2050年的公司未来资本值(按分段侵蚀率折现)

我拥有10家公司,其资本会随时间侵蚀或完全不受侵蚀,侵蚀率可能随时间段变化(例如第一种情况:2030年及之前侵蚀率为-2%,之后至2050年为-5%)。希望新增列计算至2050年的未来资本值,按不同递减率折现。

解决方案

核心是编写一个自定义函数处理三种侵蚀率场景,再通过apply映射到DataFrame的每一行,得出2050年的资本值。

步骤1:编写资本计算函数

这个函数会根据不同的侵蚀规则,逐段计算资本变化:

def calculate_future_capital(current_cap, erosion_rules):
    # 无侵蚀情况:资本保持原值
    if pd.isna(erosion_rules):
        return current_cap
    current_year = 2021
    cap = current_cap
    # 遍历每一段侵蚀规则
    for rate, end_year in erosion_rules:
        years = end_year - current_year
        if years <= 0:
            continue  # 跳过已过期的时间段
        # 按复利计算当前时间段的资本变化
        cap = cap * (1 + rate) ** years
        current_year = end_year
        if current_year >= 2050:
            break  # 已到目标年份,提前终止计算
    return cap

步骤2:将函数应用到DataFrame

把函数作用到每一行,新增Capital 2050列:

import pandas as pd
import numpy as np

# 定义侵蚀率规则
erossion1 = [
    (-0.02, 2030),
    (-0.05, 2050)
]

erossion2 = [
    (-0.02, 2050)
]

erossion3 = np.nan

# 生成测试数据
data = {
    'Decrease Rate': [erossion1 for _ in range(5)] + [erossion2 for _ in range(3)] + [np.nan] + [np.nan],
    'Capital 2021': np.random.rand(10)*1000
}

test = pd.DataFrame(data)

# 新增计算列
test['Capital 2050'] = test.apply(lambda row: calculate_future_capital(row['Capital 2021'], row['Decrease Rate']), axis=1)

print(test)

关键说明

  • 分段计算时,以上一段的结束年份作为下一段的起始年份,确保时间连续;
  • 加入过期时间段判断,避免无效计算;
  • 到达2050年时提前终止循环,提升运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:05:17