我有许多客户的起始价值和一些未来的预期增长率。
以下是一个简单的示例数据框:
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
对于每个Cust,我想将起始值乘以增长率,然后将该值前移到下一个期间。我可以用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
思想?
答案 0 :(得分:2)
您可以使用cumprod
函数执行累积产品:
df['Pred_val'] = df.Growth.fillna(1).groupby(df.Cust).cumprod()*df.startingValue