Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 复利资本化_Python_Pandas_Economics - Fatal编程技术网

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。它现在对我非常有用。谢谢!!!我已经编辑了你的答案,以防将来有人会遇到同样的问题。我希望有一天我能自己编写同样的代码。干杯!