我想将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中执行此操作吗?谢谢!
国际大学学院
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)
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |