Reputation: 23
I'm trying to create a simple amortization of a loan. For some reason, my code stops working after a few periods. Starting on period 2006-04-30, my code is not recognizing the beginning balance and is not calculating interest on this balance nor is it calculating an ending balance. Any suggestions are greatly appreciated.
import numpy as np
import pandas as pd
from datetime import datetime
data = pd.DataFrame({'date': pd.date_range("2006-01-01", "2011-12-31", freq='M')})
data['date'] = pd.to_datetime(data['date'])
data.set_index(data['date'], inplace=True)
orig_balance = 1000000
interest_rate = .06
day_count = 30/360
data['monthly_principal_pmt'] = 10000
date_cut_off = '2006-01-31'
data['beginning_balance'] = 0
for row in data:
data.at[date_cut_off,'beginning_balance'] = orig_balance
data['ending_balance'] = np.maximum(data['beginning_balance'] - data['monthly_principal_pmt'],0)
data['monthly_interest_pmt'] = data['beginning_balance'] * day_count * interest_rate
data['beginning_balance'] = data['ending_balance'].shift()
Upvotes: 0
Views: 469
Reputation: 23
Thank you for the help! this now works:
import numpy as np
import pandas as pd
from datetime import datetime
data = pd.DataFrame({'date': pd.date_range("2006-01-01", "2011-12-31", freq='M')})
data['date'] = pd.to_datetime(data['date'])
data.set_index(data['date'], inplace=True)
orig_balance = 1000000
interest_rate = .06
day_count = 30/360
data['monthly_principal_pmt'] = 10000
date_cut_off = '2006-01-31'
data['beginning_balance'] = 0
for yr in range(1,72):
data.at[date_cut_off,'beginning_balance'] = orig_balance
data['ending_balance'] = np.maximum(data['beginning_balance'] - data['monthly_principal_pmt'],0)
#data['ending_balance'] = data['beginning_balance'] - data['monthly_principal_pmt']
data['monthly_interest_pmt'] = data['beginning_balance'] * day_count * interest_rate
data['beginning_balance'] = data['ending_balance'].shift()
Upvotes: 0