2017-09-25 60 views
0

我已經建立了一種財務預測模型。這是非常漫長的,我不確定我會用它來做什麼樣的功能。基本上我需要根據前一年計算本年度的預計支出,然後重新列出清單的優先順序,以便在上一財年購買的東西降到最低。我試圖計算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

每年的數據結構是什麼? – GiantsLoveDeathMetal

+0

一個簡單的數值例子將有助於帶來更好的可重現代碼 – chrisckwong821

+0

@GiantsLoveDeathMetal我編輯了這個例子,它是一個熊貓數據框。這有幫助嗎? – EEPBAH

回答

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) 

而且已經calculate_budget return下一年的預算。

最後,你可以同時返回的項目和預算,像這樣:

budget_each_year = [] 
for n in range(30): 
    df, budget = calculate_year(df, budget) 
    budget_each_year.append(budget) 

這將創建預算的各個版本中的列表。

相關問題