我正在使用 Pandas 来跟踪贷款余额。贷款余额受还款或额外借款以及利息(按前一天的余额每天计算)的影响。
到目前为止,我已经通过使用 itertuples(下面的示例)来完成此操作。这是可行的,但如何将其矢量化?我遇到的困难是每天申请的利息取决于余额,但余额取决于昨天的余额和昨天申请的利息。
如何使用 .apply 或类似的东西一次计算两个相关的余额和利息系列?
谢谢!
import pandas as pd
# Set up a df with values of balance_change (repayments or additional borrowing)
# and rate (percentage annual interest rate on that day)
df = pd.DataFrame({"balance_change": [0, 100, 0, 0], "rate": [4, 4, 4, 3]})
df.index = pd.to_datetime(
pd.Index(["2020-05-14", "2020-05-15", "2020-05-16", "2020-05-17"])
)
all_results = pd.DataFrame()
yesterday_balance = 0
for row in df.itertuples():
# Convert annual percentage into daily ratio interest rate
daily_interest_rate = (1 + (row.rate) / 100) ** (1 / 365) - 1
# Calculate interest to be applied today, apply this and any repayments/additional borrowing
interest_added_today = yesterday_balance * daily_interest_rate
balance = yesterday_balance + row.balance_change + interest_added_today
# Put results in a dataframe
this_row = pd.DataFrame(
{
"date": [row.Index],
"payments": row.balance_change,
"annual_interest_rate": row.rate,
"calculated_daily_interest": [interest_added_today],
"calculated_balance": [balance],
}
)
# Build up a larger DataFrame for all dats
all_results = pd.concat([all_results, this_row])
# Update yesterday_balance
yesterday_balance = balance