标签:Python与Excel,pandas
在金融行业工作的人每天都在处理现金流预测,但大多是用Excel。事实上,Excel确实易于使用且透明。可以在几分钟内构建一个现金流预测模型——编写几个公式,然后向下拖动复制。在本文中,我们将学习如何用Python构建一个简单的现金流预测模型,最终形成一个更复杂的模型。在这个模型中,我们用Python构建了一个抵押计算器。
用于现金流预测的Python工具
我们可以使用列表或pandas库来预测现金流。可能还有其他工具或库,有兴趣的可以进一步研究,但这里只使用列表和pandas。
示例
假设我们有一项资产可以产生30年的收入。第一年收入是100美元,在接下来的29年里每年增长6%(30年后就没有收入了)。计算该项资产的现值,每年贴现2%。
Excel模型
Excel用户可能已经知道如何(在Excel中)对此问题建模。多个输入值、公式和下拉列表,让我们看看下面的例子。这里只显示了10年,但实际的Excel文件显示了30年。

图1
使用列表建模
Python列表是一种有序的数据结构,这正是我们建模时间序列数据(即随时间变化的现金流)所需要的。需要说明的是,虽然我们可以使用列表来模拟现金流,但这样做并不是一个好主意,因为我们必须自己做很多低级数据操作。这里,我们只是演示这个想法,实际上我们应该使用pandas(或numpy)来模拟现金流预测。
income_first_yr = 100
growth_rt = 0.06
discount_rt = 0.02
其次,在列表中设置初始值,cashflow=[income_first_yr]。然后,再循环29次,计算随后每年的收入,并将其添加到列表中。我们有一个30年的现金流预测。
cashflow = [income_first_yr]
for i in range(29):
cashflow.append(cashflow[i] * (1 + growth_rt))
接下来,我们将在另一个列表中设置贴现现金率。
discount_vector = [1]
for i in range(29):
discount_vector.append(discount_vector[i] / (1 + discount_rt))
如果想直观地看到这两个向量,我们可以把它们并排放置,可以使用zip()函数来实现。它基本上在每个第i项上组合两个列表,并将它们作为元组返回,如下图所示。注意,这个zip()函数实际上创建了30个元组。

图2
我们知道,对于在zip()函数中创建的每个元组,第一个元素是收入,第二个元素是贴现率,因此我们可以将它们相乘以获得贴现现金流。让我们通过元组循环计算贴现现金流,并将其放入另一个列表中。这样,当前值就是结果列表的总和。
discounted_cashflow = []
for item in zip(cashflow,discount_vector):
discounted_cashflow.append(item[0] * item[1])

图3
使用pandas建模
使用pandas创建现金流预测比仅使用列表更容易,因为我们可以使用一些内置的方法。让我们从创建一个包含30行和2列的pandas数据框架开始——一列用于收入预测,另一列用于贴现率。

图4
一旦我们有了这两个向量,我们可以将它们相乘得到贴现现金流,然后求和sum()得到现值。
