2016-04-11 33 views
1

Aşağıdakilerin python/pandas data frame'lerinde gerçekleştirilip gerçekleştirilemeyeceğini merak ediyorum. Özellikle, veri çerçevemde ilk olarak bir gözlem bulmayı düşünüyorum: ex: value = 1 ve eğer durum buysa, o sütundaki sonraki n satırları da 1'e iletmek istiyorum. Buradaatlama elemanları veya doldurma elemanları

benim dataframe

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) 

böylece gibi nasıl görüneceğini olduğu Uzun = 1 (indeks = 6 bakın) Aşağıdaki n istiyoruz - satır (varsayalım n = 2 ve böylece sütunda endeksi 7, 8 Uzun) da 1 olmalıdır. Bu zaten 1 ise veya 1 = 0 =
Long = -1 ise, sıfırlanır ve bir sonraki ilk Long = 1 Long değeri için sadece 0, 1 veya -1

olabilir.

Herhangi bir yardım, dokümantasyon harika olurdu - teşekkürler!

cevap

0

Bunu bir şekilde tanımlamanın bir yolu olduğundan emin değilim, ancak işte çalışması gereken bir kod.

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