2017-09-13 16 views
1

私は多年の財務予測をしようとしています。その年のランクに基づいて支出を計算し、翌年の支出を再計算して計算する必要があります。パンダのランク別の合計値

私のデータフレームには、車の部品があり、制約のある予算(400ドル)で修正/交換するための費用がかかります。その予算が費やされたら、その年は何も修正できなくなります。翌年。

1年目では、予算のみが送信をカバーしますが、2年目では送信がうまくいっていますので、最も低いランクです。予算限度までランクアップに基づいて累積合計を実行するにはどうすればよいですか?

df 
    Part   Rank(Year 1)  Cost(Y1) Spend(Y1) Rank(Y2) Spend(Y2) 

    Transmission  1    400  400   4   0 
    Tires    2    400  0   1   400 
    Windshield   3    100  0   2   0 
    Wipers    4    20  0   3   0 

はまた、追加したい:

for val in df['Spend']: 
     if val.cumsum() >= budget_var: 
      val = 0 

これは、それが今ある方法ですが、私は、ランクの順であることを合計する必要があります。

答えて

1
sorted_df = df.sort_values(col_name) 

また、私はあなたのcumsum()が正しいとは思わない。それを列全体ではなく列の個々の値に適用しています。

このような何かが動作するはずです。この

df['Spend'] = max(0,df['Cost'].cumsum()) 
+0

につながるのでしょうか? – EEPBAH

+0

スライスを取ってそのデータフレームをソートすることはできますが、データフレームが本当に大きくない限り、それはより複雑で多くのメリットはありません。したがって、たとえば: – Acccumulation

+0

sorting_df = df.loc [、、 'ランク']。sort_values() df ['支出]] [sorting_df.index] =最大(0、df ['コスト '] – Acccumulation

1

をお試しください:

>>> df 
Out[]: 
      Part Rank(Y1) Cost(Y1) Spend(Y1) Rank(Y2) 
0 Transmission   1  400  400   4 
1   Tires   2  400   0   1 
2 Windshield   3  100   0   2 
3  Wipers   4  20   0   3 

budget_var = 400 

df['Spend(Y2)'] = df['Cost(Y1)'].where(df['Cost(Y1)'] 
             [pd.np.argsort(df['Rank(Y2)'])] 
             .cumsum() 
             .where(lambda x: x <= budget_var), 0) 


>>> df 
Out[]: 
      Part Rank(Y1) Cost(Y1) Spend(Y1) Rank(Y2) Spend(Y2) 
0 Transmission   1  400  400   4   0 
1   Tires   2  400   0   1  400 
2 Windshield   3  100   0   2   0 
3  Wipers   4  20   0   3   0 

  • df['Cost(Y1)']はもちろん、コストシリーズ
  • where(..., 0)スライスシリーズとリターンです0 outsid Eスライス
  • df['Cost(Y1)']
  • [pd.np.argsort(df['Rank(Y2)'])]スライスCost(Y1)Rank(Y2)順序に従ってそれを注文する費用データを使用
  • cumsum()ソートコストシリーズ
  • where(lambda x: x <= budget_var)の累積和は以下の値についてブールマスクであり得ますbudget_var

累積和がBUDGE未満である場合、各行の全費用は、Spendで表示され、この方法t。私は新しいデータフレームに、私はさらに1年間計算するたびに行う必要があります budget_var = 500

>>> df 
Out[]: 
      Part Rank(Y1) Cost(Y1) Spend(Y1) Rank(Y2) Spend(Y2) 
0 Transmission   1  400  400   4   0 
1   Tires   2  400   0   1  400 
2 Windshield   3  100   0   2  100 
3  Wipers   4  20   0   3   0 
関連する問題