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

如何使用Python pandas实现滚动IRR计算

滚动IRR计算实现方案

计算逻辑前提

滚动IRR默认采用**扩展滚动窗口(成立至今口径)**的逻辑,每个时间节点的IRR计算规则为:

  • 取从第一期到当前期的所有历史CFs(现金流)作为序列前半部分
  • 将当前期的期末NAV作为最后一笔现金流入,补充到现金流序列末尾
  • 对拼接后的完整现金流序列计算IRR即可得到当期滚动IRR
    如果需要固定长度的滑动窗口IRR,只需要调整取数的窗口范围即可。

代码实现

首先安装依赖库:
pip install pandas numpy numpy-financial
核心实现代码:

import pandas as pd
import numpy as np
import numpy_financial as npf

# 构造示例DataFrame,实际使用时替换为你自己的df即可
df = pd.DataFrame({
    'CFs': [-100, 1, 2, 3, 2, 110],
    'NAV': [100, 101, 103, 106, 108, 0]
})

def calc_period_irr(cf_list, current_nav):
    full_cf = cf_list + [current_nav]
    try:
        # 计算当期IRR,无法计算时返回空值
        return npf.irr(full_cf)
    except:
        return np.nan

# 计算扩展滚动IRR(成立至今)
df['rolling_irr_since_inception'] = [
    calc_period_irr(df['CFs'].iloc[:i+1].tolist(), df['NAV'].iloc[i])
    for i in range(len(df))
]

# 如需计算固定滑动窗口IRR,比如窗口长度为3期,使用以下代码即可
window_size = 3
df[f'sliding_irr_{window_size}period'] = [
    calc_period_irr(df['CFs'].iloc[i:i+window_size].tolist(), df['NAV'].iloc[i+window_size-1])
    if i + window_size <= len(df)
    else np.nan
    for i in range(len(df))
]

结果优化说明

  • 如果你的数据是月度/季度等非年度频次,可通过以下公式换算为年化IRR:年化IRR = (1 + 单期IRR) ** 每年期数 - 1,比如月度数据每年期数取12,季度取4
  • 你可以根据业务需求调整try-except块的异常处理规则,比如对无法计算的情况返回特定标识而不是空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:54:06