使用pandas计算下一行的值作为前一行的函数

时间:2018-05-10 04:20:15

标签: python pandas dataframe

我正在尝试为我的DataFrame实现以下算法:

if Tenure==0: 
   s=1 
else: 
   s = (previous value from "s") * (1-previous value from "h")

s计算为h的函数,初始值为1.

输入数据框:

        popt    stopt    popcum    h        s
Tenure                  
 0.0    2383    508.0   5067890 0.000100    1
 1.0    18358   17310.0 5065507 0.003417    0
 2.0    16742   15103.0 5047149 0.002992    0
 3.0    13298   11361.0 5030407 0.002258    0
 4.0    9566    9522.0  5017109 0.001898    0


result3["s"]=result3.apply(funkcyjka)

要跳过第一个条件我刚编辑第一行因为它是唯一一个Tenure = 0

以下是我的想法:

def funkcyjka(res):
    x=0
    lol=(res["s"].iloc[x])*(1-(res["h"].iloc[x]))
    x+=1
    return lol

但它并没有达到我的预期。如何将此功能实现到我的Dataframe?

1 个答案:

答案 0 :(得分:3)

如果你在纸上追踪这一点,这就是s每一行的实际计算结果:

1
1 * (1 - h0)
(1 - h0) * (1 - h1)
(1 - h0) * (1 - h1) * (1 - h2)
...

所以,你在这里需要shift + cumprod

df['s'] = (1 - df['h'].shift()).fillna(1).cumprod()
df
         popt    stopt   popcum         h         s
Tenure                                             
0.0      2383    508.0  5067890  0.000100  1.000000
1.0     18358  17310.0  5065507  0.003417  0.999900
2.0     16742  15103.0  5047149  0.002992  0.996483
3.0     13298  11361.0  5030407  0.002258  0.993502
4.0      9566   9522.0  5017109  0.001898  0.991259