我想通过重用上面的行来计算下面的行的值来创建数据帧。目前我正在使用变量来存储值,并创建列表并将列表推送到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