Python 复利资本化
我正在写一个熊猫银行存款账户的模拟。 我陷入了复利的困境(它是利息再投资的结果,因此下一期的利息是本金加上以前累计的利息所得。) 到目前为止,我有以下代码:Python 复利资本化,python,pandas,economics,Python,Pandas,Economics,我正在写一个熊猫银行存款账户的模拟。 我陷入了复利的困境(它是利息再投资的结果,因此下一期的利息是本金加上以前累计的利息所得。) 到目前为止,我有以下代码: import pandas as pd from pandas.tseries.offsets import MonthEnd from datetime import datetime # Create a date range start = '21/11/2017' now = datetime.now() date_rng = p
import pandas as pd
from pandas.tseries.offsets import MonthEnd
from datetime import datetime
# Create a date range
start = '21/11/2017'
now = datetime.now()
date_rng = pd.date_range(start=start, end=now, freq='d')
# Create an example data frame with the timestamp data
df = pd.DataFrame(date_rng, columns=['Date'])
# Add column (EndOfMonth) - shows the last day of the current month
df['LastDayOfMonth'] = pd.to_datetime(df['Date']) + MonthEnd(0)
# Add columns for interest, Sasha, Artem, Total, Description
df['Debit'] = 0
df['Credit'] = 0
df['Total'] = 0
df['Description'] = ''
# Iterate through the DataFrame to set "IsItLastDay" value
for i in df:
df['IsItLastDay'] = (df['LastDayOfMonth'] == df['Date'])
# Add the transaction of the first deposit
df.loc[df.Date == '2017-11-21', ['Debit', 'Description']] = 10000, "First deposit"
# Calculate the principal sum (It the summ of all deposits minus all withdrows plus all compaund interests)
df['Total'] = (df.Debit - df.Credit).cumsum()
# Calculate interest per day and Cumulative interest
# 11% is the interest rate per year
df['InterestPerDay'] = (df['Total'] * 0.11) / 365
df['InterestCumulative'] = ((df['Total'] * 0.11) / 365).cumsum()
# Change the order of columns
df = df[['Date', 'LastDayOfMonth', 'IsItLastDay', 'InterestPerDay', 'InterestCumulative', 'Debit', 'Credit', 'Total', 'Description']]
df.to_excel("results.xlsx")
输出文件看起来不错,但我需要以下内容:
我怎样才能做到这一点呢?您需要循环,因为您的总数会随着前几行的变化而变化,这会影响后几行。因此,您当前的利息计算是错误的
total=0
累计利息=0
每_天的总_=[]
每日利息=[]
每日累积量=[]
对于df.itertuples()中的日期:
总计+=日.借方-日.贷方
利息=总额*0.11/365
累计利息+=利息
如果day.IsItLastDay:
合计+=累计利息
每天总计。追加(总计)
每日利息。附加(利息)
每日累计利息。追加(累计利息)
如果day.IsItLastDay:
累计利息=0
df.Total=每天的总量
df.InterestPerDay=每天的利息
df.InterestCumulative=每天累计
不幸的是,这看起来更加混乱,但当值依赖于以前的值时,就会发生这种情况。根据您的具体要求,可能有一些很好的方法可以使用数学来简化此过程,但除此之外,这就是您所拥有的
我已将此内容直接写入stackoverflow,因此它可能并不完美。您好。谢谢你的回答!我非常喜欢你的解决方案,因为它看起来非常优雅,但不幸的是它不起作用。我只是复制它并粘贴到线条上№ 我的密码是36。我有两个问题:1)“总计”列根本不会改变它的值。“InterestCumulative”列的值惊人地正确,但不幸的是仅在第一个月:(在长数据范围内,它甚至开始包含负值(在本例中不可能).我对代码进行了修改,但没有找到有效的方法。你知道任何解决方案吗?高级感谢!啊,我错过了你的双重要求,需要每月更改总价值。这意味着不能很好地预先计算复利,因为每天的利息取决于总金额,而总金额取决于每天的利息等。我将写一些可能对你有用的东西。尝试新的答案。不那么优雅,但不幸的是,你必须计算每天的利息,因为它可能会被前一天的结果所改变。请注意,这会使你所做的某些事情无效(例如,在计算之前设置利息日不起任何作用).Hi,@PuckerPluck。它现在对我非常有用。谢谢!!!我已经编辑了你的答案,以防将来有人会遇到同样的问题。我希望有一天我能自己编写同样的代码。干杯!