2017-04-14 32 views
4

私はSASコードをPythonに転送したいのですが、Pythonでretain関数を見つけることができません。pythonにretain関数がありますか?私は、SASコードをPythonに転送したい

データは次のようである:= 2 TYPE_ID場合

type_id amount 
1   100 
1   200 
1   400 
2   0 
1   200 
1   300 
2   0 
1   150 

何が欲しいのは、量は、前の行の負の値に等しいです。だから、データは次のようになります後に機能を保持:

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でこれを行う方法についてどんな考えを持っていますか? ありがとう!

+2

行における2つTYPE_ID = 2S(すなわち連続)がある場合はどう?それとも不可能ですか? – DSM

+0

パンダにはあまり知識がありませんが、なぜあなたが否定的な結果を望むのか不思議です。 – roganjosh

+0

この場合、2つのtype_id = 2を連続して持つことはできません。 – juanbin

答えて

2

IIUC

あるいは
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 
+0

Uは天才です!どうもありがとうございます! – juanbin

+0

ありがとう!どうしてupvoteして受け入れるのですか? –

関連する問題