我建立了一种财务预测模型。它很长,而且我不确定我会用它做什么样的功能。基本上我需要根据前一年计算一年的预计支出,然后重新确定列表的优先顺序,以便上一财年购买的东西降到最低点。我想计算30年。我知道这可以通过循环来完成,但是,可用于支出的预算每年都会发生变化。
以下是我正在尝试实现的数据框的示例:
Budget_Y1 = 400.00
Budget_Y2 = 300.00
DF1
Part RankY1 CostY1 SpendY1 RankY2 CostY2 SpendY2
Transmission 1 400 400 4 0 0
Tires 2 200 0 1 200 200
Windshield 3 100 0 2 100 100
Wipers 4 20 0 3 20 0
我的数据最终要复杂得多,涉及数百万行。
现在我根据前一年的情况单独计算每年,以便我可以轻松更改每年的可用预算,以便运行不同的资助方案。
我的问题是,是否有一个功能(或功能类型)可以根据前一年的每年计算,每年的预算不同,所以我不需要手动编码所有计算?
我是在看发电机做这样的事情还是其他功能? 基本上它类似于各种各样的amoritzation计算器。
现在,由于每年的预算不同,我使用这段代码超过三十年才能获得每年的费用:
df1.loc[(df1['RankY2']<4), 'CostY2'] = df1['CostY1']
df1['Spend_Y2']= np.where((df1.Cost_Y2.cumsum(
<=budget_Y2), df1.Cost_Y2 ,0)
...Repeat some other calculations...
...do new priority calculation...
df1 = df1.sort_values('RankY3', ascending = False)
编辑了一个更清晰的例子。
答案 0 :(得分:1)
还不清楚你想要达到的目标。
这是你的功能循环:
def budget_calculations(df, year_budget):
df.loc[(df['RankY2']<4), 'CostY2'] = df['CostY1']
df['Spend_Y2'] = np.where((df.Cost_Y2.cumsum(<=year_budget), df.Cost_Y2, 0)
return df.sort_values('RankY3', ascending = False)
for budget in budget_list:
df = budget_calculation(df, budget)
这将遍历budget_list(例如[100, 250, 300]
)并输出要在下一次迭代中使用的新pd.DataFrame。
如果您想在每次迭代中计算预算:
# iterate 30 times
for n in range(30):
budget = calculate_budget(df, budget)
并计算明年预算的计算资金return
。
最后,你可以像这样返回项目和预算:
budget_each_year = []
for n in range(30):
df, budget = calculate_year(df, budget)
budget_each_year.append(budget)
这将创建所有迭代的预算列表。