计算熊猫中两个相互依赖的系列

时间:2021-05-16 16:52:18

标签: python pandas vectorization

我正在使用 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

0 个答案:

没有答案