我想将 SAS 代码转换为 python,但在 python 中找不到保留函数。
数据是这样的:
type_id amount
1 100
1 200
1 400
2 0
1 200
1 300
2 0
1 150
我想要的是当type_id = 2时,金额等于上一行的负值。所以保留函数后的数据会是这样的:
type_id amount
1 100
1 200
1 400
2 -400
1 200
1 300
2 -300
1 150
SAS 代码是:
data B;
set A;
retain tempvar 0;
if type_id = 2
then amount = tempvar;
else tempvar = -amount;
drop tempvar;
run;
有人知道如何在 python 中执行此操作吗?谢谢!
国际联合会
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
或者:
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
我是一名优秀的程序员,十分优秀!