使用上面的行使用pandas数据帧迭代计算下面一行的值



我想通过重用上面的行来计算下面的行的值来创建数据帧。目前我正在使用变量来存储值,并创建列表并将列表推送到cf数据帧来计算折扣现金流。

当前可复制代码-

import math
import pandas as pd
#User input
cashflow = 3.6667
fcf_growth_for_first_5_years = 14/100
fcf_growth_for_last_5_years = 7/100
no_of_years = 10
t_g_r = 3.50/100 ##Terminal Growth Rate
discount_rate = 10/100
##fcf calculaton for 10 Years
future_cash_1_year = cashflow*(1+fcf_growth_for_first_5_years)
future_cash_2_year = future_cash_1_year*(1+fcf_growth_for_first_5_years)
future_cash_3_year = future_cash_2_year*(1+fcf_growth_for_first_5_years)
future_cash_4_year = future_cash_3_year*(1+fcf_growth_for_first_5_years)
future_cash_5_year = future_cash_4_year*(1+fcf_growth_for_first_5_years)
future_cash_6_year = future_cash_5_year*(1+fcf_growth_for_last_5_years)
future_cash_7_year = future_cash_6_year*(1+fcf_growth_for_last_5_years)
future_cash_8_year = future_cash_7_year*(1+fcf_growth_for_last_5_years)
future_cash_9_year = future_cash_8_year*(1+fcf_growth_for_last_5_years)
future_cash_10_year = future_cash_9_year*(1+fcf_growth_for_last_5_years)
fcf = []
fcf.extend(value for name, value in locals().items() if name.startswith('future_cash_'))
cf = pd.DataFrame()
cf.insert(0, 'Sr_No', range(1,11))
cf.insert(1, 'Year', range(23,33))
cf['fcf'] = fcf
cf

期望输出-

我通过使用上面给出的lst方法代码来获得所需的输出,但我正在寻找使用pandas df而不是使用lst&variables


Sr_No Year    fcf
0   1   23  4.180038
1   2   24  4.765243
2   3   25  5.432377
3   4   26  6.192910
4   5   27  7.059918
5   6   28  7.554112
6   7   29  8.082900
7   8   30  8.648703
8   9   31  9.254112
9   10  32  9.901900

使用for循环使处理更加容易

import math
import pandas as pd
#User input
cashflow = 3.6667
fcf_growth_for_first_5_years = 14/100
fcf_growth_for_last_5_years = 7/100
no_of_years = 10
t_g_r = 3.50/100 ##Terminal Growth Rate
discount_rate = 10/100
cf = pd.DataFrame()
cf.insert(0, 'Sr_No', range(1,11))
cf.insert(1, 'Year', range(23,33))
##fcf calculaton for 10 Years
fcf=[]
for row in range(len(cf)):
if cf.Sr_No[row]==1:
fcf.append(cashflow*(1+fcf_growth_for_first_5_years))
elif cf.Sr_No[row]<6:
fcf.append(fcf[row-1]*(1+fcf_growth_for_first_5_years))
else:
fcf.append(fcf[row-1]*(1+fcf_growth_for_last_5_years))
cf['fcf'] = fcf
cf

。。。我正在寻找更有效的方法来计算值使用pandas df。。。

您可以使用.cumprod():

cashflow = 3.6667
fcf_growth_for_first_5_years = 14 / 100
fcf_growth_for_last_5_years = 7 / 100
df = pd.DataFrame({
"Sr_No": range(1, 1 + no_of_years), "Year": range(23, 23 + no_of_years)
})
df.loc[df.index[:no_of_years // 2], "fcf"] = 1 + fcf_growth_for_first_5_years
df["fcf"] = df["fcf"].fillna(1 + fcf_growth_for_last_5_years).cumprod() * cashflow

结果:

Sr_No  Year       fcf
0      1    23  4.180038
1      2    24  4.765243
2      3    25  5.432377
3      4    26  6.192910
4      5    27  7.059918
5      6    28  7.554112
6      7    29  8.082900
7      8    30  8.648703
8      9    31  9.254112
9     10    32  9.901900

最新更新