2017-06-05 37 views
2

我有許多客戶的起始價值和未來預期增長率。熊貓:通過組內的另一個數值乘以另一列中的每個值的起始值

下面是一個簡單的示例數據幀:

df = pd.DataFrame([['A',1,10,np.nan],['A',2,10,1.2],['A',3,10,1.15], 
        ['B',1,20,np.nan],['B',2,20,1.05],['B',3,20,1.2]],columns = ['Cust','Period','startingValue','Growth']) 
print df 

    Cust Period startingValue Growth 
0 A  1    10  NaN 
1 A  2    10 1.20 
2 A  3    10 1.15 
3 B  1    20  NaN 
4 B  2    20 1.05 
5 B  3    20 1.20 

對於每個卡斯特,我要通過生長速率乘以初始值,然後再進行該值正向到下一個週期。我可以用groupby-apply或醜陋的for循環來做到這一點,但我希望有一些更快的矢量化方法。我曾希望會有一些.fill()魔法,當你向下填充時,你可以乘以另一列。以下是輸出的結果:

Cust Period startingValue Growth Pred_val 
0 A  1    10  NaN  10.0 
1 A  2    10 1.20  12.0 
2 A  3    10 1.15  13.8 
3 B  1    20  NaN  20.0 
4 B  2    20 1.05  21.0 
5 B  3    20 1.20  25.2 

想法?

回答

2

可以使用cumprod功能做一個累積的產品:

df['Pred_val'] = df.Growth.fillna(1).groupby(df.Cust).cumprod()*df.startingValue 
+0

你是個明星!我知道有一個更簡單的方法 – flyingmeatball

相關問題