我有一个不可预测的现金流和不可预测的周期长度的数据框架,我需要生成一个向后看的内部收益率。
在Excel中使用解算器来完成它非常简单,想知道是否有一种好的方法可以在Python中实现它。(我想我可以利用openpyxl让solver在python的excel中工作,但这感觉不必要的麻烦)。
问题很简单:NPV of Cash Flow = ((cash_flow)/(1+IRR)^years_ago)
目标:求和(NPV)=0的内部收益率
我的数据帧如下所示:cash_flow |years_ago
-----------------------
-3.60837e+06 |4.09167
31462 |4.09167
1.05956e+06 |3.63333
-1.32718e+06 |3.28056
-4.46554e+06 |3.03889
似乎其他的IRR计算器(如numpy.IRR)都假设严格的周期截止(每3个月、1年等),这是行不通的。另一个选项似乎是迭代路径,我不断地猜测、检查和迭代,但这感觉是解决这个问题的错误方法。理想情况下,我正在寻找能做到这一点的方法:irr = calc_irr((cash_flow1,years_ago1),(cash_flow2,years_ago2),etc)
编辑:这是我处理问题的代码。我有一个事务列表,我选择按id创建临时表for id in df_tran.id.unique():
【python|python 内部收益率_用Python计算可变现金流内部收益率(pandas)】temp_df = df_tran[df_tran.id == id]
cash_flow = temp_df.cash_flows.values
years = temp_df.years.values
print(id, cash_flow)
print(years)
#irr_calc = irr(cfs=cash_flow, yrs=years,x0=0.100000)
#print(sid, irr_calc)
其中df_-tran(它是temp_-df的基础)看起来像:cash_flow |years |id
0 -3.60837e+06 4.09167 978237
1 31462 4.09167 978237
4 1.05956e+06 3.63333 978237
6 -1.32718e+06 3.28056 978237
8 -4.46554e+06 3.03889 978237
10 -3.16163e+06 2.81944 978237
12 -5.07288e+06 2.58889 978237
14 268833 2.46667 978237
17 -4.74703e+06 1.79167 978237
20 -964987 1.40556 978237
22 -142920 1.12222 978237
24 163894 0.947222 978237
26 -2.2064e+06 0.655556 978237
27 1.23804e+06 0.566667 978237
29 180655 0.430556 978237
30 -85297 0.336111 978237
34 -2.3529e+07 0.758333 1329483
36 21935 0.636111 1329483
38 -3.55067e+06 0.366667 1329483
41 -4e+06 4.14167 1365051
temp_df看起来与df_tran相同,只是它只保存单个id的事务
推荐阅读
- java|为什么使用开源软件_为什么要使用开源软件()
- java|开源 非开源_在从事开源律师职业之前要了解的内容
- 大数据|开源个性化内容推荐引擎_您是哪种开源个性类型()
- 业界观点|深度学习崛起十年(“开挂”的OpenAI革新者)
- 不归路之Python|什么是计算机网络(为什么需要网络通信?如何进行网络编程?)
- 蓝桥真题|【蓝桥真题五】带三百人训练了十天精选蓝桥真题,看看他们都练些什么(三门语言题解)
- python|【小白向】蓝桥杯练习系统——基础练习部分python语句解析
- leetcode|算法入门之字符串(Python)【初级算法——字符串】【蓝桥杯练习】【力扣练习】
- 备战蓝桥杯|蓝桥杯python组十二届省赛真题+解析+代码(通俗易懂版)