在 Python 中执行交叉列计算
Perform a cross column calculation in Python
上下文
我正在尝试按照 this 示例构建投资组合仪表板,但我使用的是 Python 而不是 Excel。我目前不确定如何从3:47开始交叉计算得出下一期余额。
问题
在 Python 中有没有办法执行此操作?我尝试了一个 for 循环,但它返回了在前向周期数上迭代的相同数字。以下是示例:
date_range = pd.date_range(start=today, periods=period_of_investments, freq=contribution_periods)
returns_port = 12
rs = []
balance_total = []
for one in range(len(date_range))):
return_loss = (returns_port/period_of_investments)*capital_insert
rs.append(return_loss)
period_one_balance = capital_insert+return_loss
period_two_return_loss = (returns_port/period_of_investments)*(period_one_balance + capital_insert)
period_two_balance = period_one_balance + capital_insert + period_two_return_loss
balance_total.append(period_two_balance)
我没有看过视频,但我会解释如何为以下问题编写 Python 代码,这与视频中的问题类似。
假设您要计算未来20年固定利率每月定期存款的投资return。
第一步是了解 pd.date_range()
的工作原理。如果您在本月初开始,整个期间将为 pd.date_rage(start='4-1-2021', periods='240', freq='1m')
(240 来自 20 年,每个 12 个月)。基本上,我们是在每个月底计算 return。
import pandas as pd
portfolio = pd.DataFrame(columns=['Date', 'Investment', 'Return/Loss', 'Balance'])
interest_rate = 0.121
monthly_deposit = 500
dates = pd.date_range(start="3-31-2021", periods=240, freq='1m')
investment = [monthly_deposit]*len(dates)
return_losses = []
balances = []
current_balance = 500
for date in dates:
current_return_loss = (interest_rate/12)*current_balance
return_losses.append(round(current_return_loss,2))
balances.append(round(current_balance + current_return_loss))
current_balance += (current_return_loss + monthly_deposit)
portfolio['Date'] = pd.to_datetime(dates)
portfolio['Investment'] = investment
portfolio['Return/Loss'] = return_losses
portfolio['Balance'] = balances
balance_at_end = balances[-1]
print(portfolio.head(10))
print(balance_at_end)
您将得到以下结果,与视频相同:
Date Investment Return/Loss Balance
0 2021-03-31 500 5.04 505
1 2021-04-30 500 10.13 1015
2 2021-05-31 500 15.28 1530
3 2021-06-30 500 20.47 2051
4 2021-07-31 500 25.72 2577
5 2021-08-31 500 31.02 3108
6 2021-09-30 500 36.38 3644
7 2021-10-31 500 41.79 4186
8 2021-11-30 500 47.25 4733
9 2021-12-31 500 52.77 5286
506397
上下文
我正在尝试按照 this 示例构建投资组合仪表板,但我使用的是 Python 而不是 Excel。我目前不确定如何从3:47开始交叉计算得出下一期余额。
问题
在 Python 中有没有办法执行此操作?我尝试了一个 for 循环,但它返回了在前向周期数上迭代的相同数字。以下是示例:
date_range = pd.date_range(start=today, periods=period_of_investments, freq=contribution_periods)
returns_port = 12
rs = []
balance_total = []
for one in range(len(date_range))):
return_loss = (returns_port/period_of_investments)*capital_insert
rs.append(return_loss)
period_one_balance = capital_insert+return_loss
period_two_return_loss = (returns_port/period_of_investments)*(period_one_balance + capital_insert)
period_two_balance = period_one_balance + capital_insert + period_two_return_loss
balance_total.append(period_two_balance)
我没有看过视频,但我会解释如何为以下问题编写 Python 代码,这与视频中的问题类似。
假设您要计算未来20年固定利率每月定期存款的投资return。
第一步是了解 pd.date_range()
的工作原理。如果您在本月初开始,整个期间将为 pd.date_rage(start='4-1-2021', periods='240', freq='1m')
(240 来自 20 年,每个 12 个月)。基本上,我们是在每个月底计算 return。
import pandas as pd
portfolio = pd.DataFrame(columns=['Date', 'Investment', 'Return/Loss', 'Balance'])
interest_rate = 0.121
monthly_deposit = 500
dates = pd.date_range(start="3-31-2021", periods=240, freq='1m')
investment = [monthly_deposit]*len(dates)
return_losses = []
balances = []
current_balance = 500
for date in dates:
current_return_loss = (interest_rate/12)*current_balance
return_losses.append(round(current_return_loss,2))
balances.append(round(current_balance + current_return_loss))
current_balance += (current_return_loss + monthly_deposit)
portfolio['Date'] = pd.to_datetime(dates)
portfolio['Investment'] = investment
portfolio['Return/Loss'] = return_losses
portfolio['Balance'] = balances
balance_at_end = balances[-1]
print(portfolio.head(10))
print(balance_at_end)
您将得到以下结果,与视频相同:
Date Investment Return/Loss Balance
0 2021-03-31 500 5.04 505
1 2021-04-30 500 10.13 1015
2 2021-05-31 500 15.28 1530
3 2021-06-30 500 20.47 2051
4 2021-07-31 500 25.72 2577
5 2021-08-31 500 31.02 3108
6 2021-09-30 500 36.38 3644
7 2021-10-31 500 41.79 4186
8 2021-11-30 500 47.25 4733
9 2021-12-31 500 52.77 5286
506397