Pandas:将一列的起始值乘以组内另一列的每个值

时间:2017-06-05 13:21:51

标签: python pandas numpy

我有许多客户的起始价值和一些未来的预期增长率。

以下是一个简单的示例数据框:

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

思想?

1 个答案:

答案 0 :(得分:2)

您可以使用cumprod函数执行累积产品:

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