python中有保留功能吗?我想将SAS代码传输到python

jua*_*bin 5 python sas pandas

我想将SAS代码传输到python,而在python中找不到保留函数。

数据就像:

type_id    amount
1           100
1           200
1           400
2           0
1           200
1           300
2           0
1           150
Run Code Online (Sandbox Code Playgroud)

我想要的是type_id = 2时,金额等于上一行的负值。因此保留功能后的数据将如下所示:

type_id    amount
1           100
1           200
1           400
2          -400
1           200
1           300
2          -300
1           150
Run Code Online (Sandbox Code Playgroud)

SAS代码为:

data B;
set A;
retain tempvar 0;
if type_id = 2
then amount = tempvar;
else tempvar = -amount;
drop tempvar;
run;
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在python中执行此操作吗?谢谢!

Ser*_*nov 3

国际大学学院

df
type_id amount
0   1   100
1   1   200
2   1   400
3   2   0
4   1   200
5   1   300
6   2   0
7   1   150

def retain(df):
    df['ret'] = df['amount'].shift()
    df.ix[df['type_id']==2,'amount'] = -df.ix[df['type_id']==2,'ret']
    df.drop("ret", axis=1, inplace=True)
    return df

retain(df)
type_id amount
0   1   100.0
1   1   200.0
2   1   400.0
3   2   -400.0
4   1   200.0
5   1   300.0
6   2   -300.0
7   1   150.0
Run Code Online (Sandbox Code Playgroud)

或者:

def retain(df):
    df.amount.ix[df.type_id==2] = - df.amount.shift().ix[df.type_id==2]
    return df

retain(df)
type_id amount
0   1   100.0
1   1   200.0
2   1   400.0
3   2   -400.0
4   1   200.0
5   1   300.0
6   2   -300.0
7   1   150.0
Run Code Online (Sandbox Code Playgroud)