да ... наконец-то я много думаю, и я получил вывод.
Код:
Interest_Rate = 0.10
Years = 5
Payments_Year = 12
Principal = 200000
start_date = (date(2019, 5, 28))
pmt = np.pmt(Interest_Rate / Payments_Year, Years * Payments_Year, Principal)
per = 1
ipmt = np.ipmt(Interest_Rate / Payments_Year, per, Years * Payments_Year, Principal)
ppmt = np.ppmt(Interest_Rate / Payments_Year, per, Years * Payments_Year, Principal)
rng = pd.date_range(start_date, periods=Years * Payments_Year, freq='MS')
rng.name = "Payment_Date"
df = pd.DataFrame(index=rng, columns=['Payment', 'Principal', 'Interest', 'Balance'],
dtype='float')
df.reset_index(inplace=True)
df.index += 1
df.index.name = "Period"
print(df.index)
df["Payment"] = np.pmt(Interest_Rate / Payments_Year, Years * Payments_Year, Principal)
df["Principal"] = np.ppmt(Interest_Rate / Payments_Year, df.index, Years * Payments_Year, Principal)
df["Interest"] = np.ipmt(Interest_Rate / Payments_Year, df.index, Years * Payments_Year, Principal)
df = df.round(2)
df["Balance"] = 0
df.loc[1, "Balance"] = Principal + df.loc[1, "Principal"]
for i in range(2, len(df) + 1):
prev_balance = df.ix[i - 1, 'Balance']
principal = df.ix[i, 'Principal']
if prev_balance == 0:
df.ix[i, ['Payment', 'Principal', 'Interest', 'Balance']] = 0
continue
if abs(principal) <= prev_balance:
df.ix[i, 'Balance'] = principal + prev_balance
else:
if prev_balance <= abs(principal):
principal = -prev_balance
addl_principal = 0
else:
print('else')
df.ix[i, 'Balance'] = 0
df.ix[i, 'Principal'] = principal
df.ix[i, "Payment"] = principal + df.ix[i, "Interest"]
df = df.round(2)
print(df)