<p>下面创建了一个设置了以下值的<a href="http://www.tvmcalcs.com/calculators/apps/excel_loan_amortization" rel="nofollow noreferrer">this Excel example</a>的Python实现:</p>
<pre><code>import pandas as pd
import numpy as np
prin = 200000 # principal/beginning loan balance
rate = 0.0675 # annual rate; monthly will be 6.75%/12
n = 30 # years; total periods will be 360 w/ monthly pmts
</code></pre>
<p>接下来,您可以使用NumPy的<a href="https://docs.scipy.org/doc/numpy-1.9.1/reference/routines.financial.html" rel="nofollow noreferrer">Financial functions</a>来计算每个时期的利息和本金。请注意,这些并不取决于您的流动贷款余额。好在下面的结果是数组(付款计划):</p>
^{pr2}$
<p>计算特定时间的未偿余额使用:
<a href="https://i.stack.imgur.com/gvEd5.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/gvEd5.png" alt="enter image description here"/></a></p>
<p>我们可以在下面定义。执行时要小心标志。在</p>
<pre><code>def balance(pv, r, n, p):
dfac = (1 + r / 12) ** n
return pv * dfac - p * (dfac - 1) / (r / 12)
</code></pre>
<p>另外,计算一个“恒定”的PMT值。这是利息加本金,在所有时期都是不变的。它是一个标量值,而不是数组。在</p>
<pre><code>pmt = np.pmt(rate / 12, n * 12, prin)
</code></pre>
<p>最后,将上述内容以表格形式汇总:</p>
<pre><code>table = pd.DataFrame({'Beg Balance' : balance(prin, rate, months - 1, -pmt),
'Principal' : principal,
'Interest' : interest,
'End Balance' : balance(prin, rate, months, -pmt)},
index=months)
# Check that the loan amortizes down to 0
assert np.allclose(table['End Balance'].tail(1), 0)
print(table.round(2))
Beg Balance End Balance Interest Principal
1 200000.00 199827.80 -1125.00 -172.20
2 199827.80 199654.64 -1124.03 -173.16
3 199654.64 199480.50 -1123.06 -174.14
4 199480.50 199305.38 -1122.08 -175.12
5 199305.38 199129.28 -1121.09 -176.10
.. ... ... ... ...
356 6377.95 5116.63 -35.88 -1261.32
357 5116.63 3848.22 -28.78 -1268.42
358 3848.22 2572.67 -21.65 -1275.55
359 2572.67 1289.94 -14.47 -1282.72
360 1289.94 -0.00 -7.26 -1289.94
</code></pre>