2016-03-03 53 views
1

的規則是:如何循環保持值不變,而條件不再成立

如果Regime = 0 =>Position = 0
如果Regime = 1 =>Position = Size
如果Regime = -1 =>Position = -Size

一旦Position取值,我想保持該值consta NT而Re仍然是1-1

任何想法如何保持Position值不變,直到Re變化?

我的數據框:

Dates() Close Re Size 
0 12/29/10 86.76 0 2073 
1 12/30/10 86.54 1 2209 
2 12/31/10 86.30 1 2339 
3 08/09/11 82.69 0 984 
4 08/10/11 78.23 0 880 
5 09/02/11 79.34 -1 1015 
6 09/06/11 78.08 -1 1002 

回答

0

您可以使用loc

print df 
    Dates() Close Re Size 
0 12/29/10 86.76 0 2073 
1 12/30/10 86.54 1 2209 
2 12/31/10 86.30 1 2339 
3 08/09/11 82.69 0 984 
4 08/10/11 78.23 0 880 
5 09/02/11 79.34 -1 1015 
6 09/06/11 78.08 -1 1002 

df.loc[df['Re']==0, 'Position'] = 0 
df.loc[df['Re']==1, 'Position'] = df['Size'] 
df.loc[df['Re']==-1, 'Position'] = -df['Size'] 

print df 
    Dates() Close Re Size Position 
0 12/29/10 86.76 0 2073   0 
1 12/30/10 86.54 1 2209  2209 
2 12/31/10 86.30 1 2339  2339 
3 08/09/11 82.69 0 984   0 
4 08/10/11 78.23 0 880   0 
5 09/02/11 79.34 -1 1015  -1015 
6 09/06/11 78.08 -1 1002  -1002 

編輯:

您可以使用fillnamethod='ffill'

print df 
    Dates() Close Re Size Position 
0 12/30/10 86.54 1 100  100 
1 12/30/10 86.54 1 100  100 
2 12/29/10 86.76 0 2073   0 
3 12/30/10 86.54 1 2209  2209 
4 12/30/10 86.54 1 -2209  -2209 
5 12/29/10 86.76 0 2073   0 
6 12/30/10 86.54 1 2209  2209 
7 12/29/10 86.76 0 2073   0 
8 12/31/10 86.30 1 2339  2339 
9 08/09/11 82.69 0 984   0 
10 08/10/11 78.23 0 880   0 
11 09/02/11 79.34 -1 1015  -1015 
12 09/06/11 78.08 -1 1002  -1002 
13 09/06/11 78.08 1 20  20 


df.loc[((df['Position'].shift()).fillna(1)) == 0,'pos'] = df['Position'] 
df.loc[ df['Position'] == 0, 'pos'] = 0 
df.at[0,'pos'] = df.at[0,'Position'] 
df['pos'] = df['pos'].fillna(method='ffill') 
print df 
    Dates() Close Re Size Position pos 
0 12/30/10 86.54 1 100  100 100 
1 12/30/10 86.54 1 100  100 100 
2 12/29/10 86.76 0 2073   0  0 
3 12/30/10 86.54 1 2209  2209 2209 
4 12/30/10 86.54 1 -2209  -2209 2209 
5 12/29/10 86.76 0 2073   0  0 
6 12/30/10 86.54 1 2209  2209 2209 
7 12/29/10 86.76 0 2073   0  0 
8 12/31/10 86.30 1 2339  2339 2339 
9 08/09/11 82.69 0 984   0  0 
10 08/10/11 78.23 0 880   0  0 
11 09/02/11 79.34 -1 1015  -1015 -1015 
12 09/06/11 78.08 -1 1002  -1002 -1015 
13 09/06/11 78.08 1 20  20 -1015 
+0

謝謝jezrael的幫助。缺少的部分是,一旦我選擇一個值,我需要保持相同的值,位置應該是[0,2209,2209,0,0,-1015,-1015] – Mariano

+0

請檢查它。 – jezrael

+0

再次非常感謝你!!!!! Jezrael !!!!! – Mariano