您可以使用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
編輯:
您可以使用fillna
與method='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
謝謝jezrael的幫助。缺少的部分是,一旦我選擇一個值,我需要保持相同的值,位置應該是[0,2209,2209,0,0,-1015,-1015] – Mariano
請檢查它。 – jezrael
再次非常感謝你!!!!! Jezrael !!!!! – Mariano