可以为pandas数据帧调整的迭代函数?

时间:2017-09-25 21:29:15

标签: python function pandas loops numpy

我建立了一种财务预测模型。它很长,而且我不确定我会用它做什么样的功能。基本上我需要根据前一年计算一年的预计支出,然后重新确定列表的优先顺序,以便上一财年购买的东西降到最低点。我想计算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)

编辑了一个更清晰的例子。

1 个答案:

答案 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)

这将创建所有迭代的预算列表。