Total Interest over Life of Loan

import pandas as pd
import numpy as np
import numpy_financial as npf

Calculate the total interest and payment for a \$10K loan over 60 months at a 3% annual interest rate.

annual_interest_rate = 0.03
monthly_interest_rate = annual_interest_rate / 12
n_periods = 60
periods = np.arange(n_periods) + 1
loan_amount = 10000.

monthly_payment = (npf.pmt(monthly_interest_rate,
                           n_periods,
                           loan_amount)
                   .round(2) * -1 )

interest_per_month = (npf.ipmt(monthly_interest_rate,
                               periods,
                               n_periods,
                               loan_amount)
                      .round(2) * -1 )
total_interest = interest_per_month.sum()

loan_amount, annual_interest_rate, n_periods, total_interest, monthly_payment
(10000.0, 0.03, 60, 781.23, 179.69)

Now, parametrize and calculate the same for loan amounts from \$10K to \$45K.

loans = []

annual_interest_rate = 0.03
monthly_interest_rate = annual_interest_rate / 12
n_periods = 60
periods = np.arange(n_periods) + 1

for loan_amount in np.arange(10000, 46000, 1000):
    monthly_payment = (npf.pmt(monthly_interest_rate,
                               n_periods,
                               loan_amount)
                       .round(2) * -1 )

    interest_per_month = (npf.ipmt(monthly_interest_rate,
                                   periods,
                                   n_periods,
                                   loan_amount)
                          .round(2) * -1 )
    total_interest = interest_per_month.sum()
    
    loans.append((loan_amount, total_interest, monthly_payment, annual_interest_rate, n_periods))
    
loans = (pd.DataFrame(loans,
                      columns=['loan_amount', 'total_interest', 'monthly_payment', 
                               'annual_interest_rate', 'n_periods'])
         .set_index('loan_amount'))
loans
total_interest monthly_payment annual_interest_rate n_periods
loan_amount
10000 781.23 179.69 0.03 60
11000 859.30 197.66 0.03 60
12000 937.47 215.62 0.03 60
13000 1015.58 233.59 0.03 60
14000 1093.72 251.56 0.03 60
15000 1171.85 269.53 0.03 60
16000 1249.99 287.50 0.03 60
17000 1328.02 305.47 0.03 60
18000 1406.16 323.44 0.03 60
19000 1484.33 341.41 0.03 60
20000 1562.46 359.37 0.03 60
21000 1640.57 377.34 0.03 60
22000 1718.64 395.31 0.03 60
23000 1796.80 413.28 0.03 60
24000 1874.88 431.25 0.03 60
25000 1952.99 449.22 0.03 60
26000 2031.19 467.19 0.03 60
27000 2109.30 485.15 0.03 60
28000 2187.37 503.12 0.03 60
29000 2265.57 521.09 0.03 60
30000 2343.67 539.06 0.03 60
31000 2421.80 557.03 0.03 60
32000 2499.85 575.00 0.03 60
33000 2577.97 592.97 0.03 60
34000 2656.12 610.94 0.03 60
35000 2734.26 628.90 0.03 60
36000 2812.30 646.87 0.03 60
37000 2890.46 664.84 0.03 60
38000 2968.65 682.81 0.03 60
39000 3046.72 700.78 0.03 60
40000 3124.87 718.75 0.03 60
41000 3202.99 736.72 0.03 60
42000 3281.13 754.69 0.03 60
43000 3359.23 772.65 0.03 60
44000 3437.38 790.62 0.03 60
45000 3515.49 808.59 0.03 60