2016-04-11 7 views
1

python/pandasのデータフレームで以下のことができるかどうかは疑問です。具体的には、まず、データフレーム内の観測値(例:value = 1)を見つけようとしています。そのような場合は、その列の次のn行を1にも転送します。ここ要素を読み飛ばしたり、要素を埋めたりする

は私のデータフレームが

Index Date  Open High Low Close Long 
0  19970101 500 501 499 501.5 0 
1  19970102 501.5 505 499 502.5 0 
2  19970103 503 507 503 506.5 0 
3  19970104 503 507 503 506.5 1 (first instance) 
4  19970105 503 507 503 506.5 1 (change here) 
5  19970106 503 507 503 506.5 0 (change here) 
6  19970107 503 507 503 506.5 -1 (reset) 
7  19970108 503 507 503 506.5 0 
8  19970109 503 507 503 506.5 1 (second instance) 

ので、次のようになりますどのようにここでロング= 1(インデックス= 6を確認してください)私は、次のnたい - 行を(仮定し、N = 2とその列のインデックス7、8もしそれがすでに1であれば、それは無関係であるか、0であれば
Long = -1とすると、リセットして次の最初のLong = 1を探す Longは0,1または-1のみとなる

ヘルプ、ドキュメントは素晴らしいと思います - ありがとう!

答えて

0

これをベクトル化する方法はありませんが、ここでは動作するはずのコードです。

n = 2 
fill_counter = 0 
longs = [] 
for i, val in enumerate(df.Long): 
    if val == 1 and not fill_counter: 
     # First observed value of 1. 
     fill_counter = n + 1 
    if fill_counter: 
     fill_counter -= 1 
     longs.append(1) 
     continue 
    longs.append(val) 
df['Long'] = longs 

>>> df 
     Date Open High Low Close Long 
0 19970101 500.0 501 499 501.5  0 
1 19970102 501.5 505 499 502.5  0 
2 19970103 503.0 507 503 506.5  0 
3 19970104 503.0 507 503 506.5  1 
4 19970105 503.0 507 503 506.5  1 
5 19970106 503.0 507 503 506.5  1 
6 19970107 503.0 507 503 506.5 -1 
7 19970108 503.0 507 503 506.5  0 
8 19970109 503.0 507 503 506.5  1 
関連する問題