2

我有一个长度不可预测的 Pandas 现金流数据框。它们每月的范围在几个月到 30 多个月之间,并且每个月都有一列包含该月的现金流信息。我需要计算每笔贷款的内部收益率,定义如下;

IRR 的定义,当 NPV 设置为 0 时,r 为“IRR”。

下面是一个 df 示例的链接,其中我有“months_remaining”、初始流出和可变期间(2 月 19 日至 12 月 29 日之间)的一系列现金流。“S”代表已结清的贷款,即已到期并已全额偿还。“0”表示已违约的贷款,因此预计永久不会有进一步的现金流;

贷款DF

我尝试了一系列方法。(1) 使用 iterrows 为每一行创建一个 numpy 数组,然后尝试使用 numpy.irr,但是仅计算可变时间段的 IRR 的问题仍然存在(我需要识别现金流何时以“S”停止并停止计算从这一点开始。)(2)避免逐行方法并尝试在 Pandas 中执行计算,一些“S”贷款和列中的一些正常现金流的混合再次使这种方法出错。

我目前工作的细胞。

感谢您的任何帮助,您可以提供。

[编辑] 使用 for 循环的工作代码示例

 for row in irr_array:
  LoanID=row[1]
  Tier=row[2]
  row=row[2:2000]
  if "S" in row:
    new_array = [i for i in row if i is not "S"]
    irr_results["IRR"]= (pd.Series(round(irr(new_array),3)))
    irr_results["LoanID"]=(pd.Series(LoanID))
    irr_results["Tier"]=(pd.Series(Tier))
    results=irr_df.append(irr_results)
  if 0 in row:
    irr_results["IRR"]= 0
    irr_results["LoanID"]=(pd.Series(LoanID))
    irr_results["Tier"]=(pd.Series(Tier))
    results=irr_df.append(irr_results)      
4

0 回答 0