2016-03-23 14 views
3

Belirli bir koşulla eşleşiyorsa, 'dan önce/sonra 5 satırın pandalarda belirli bir satırı seçmesi mümkün mü? Örneğin, satır 19'dan başlamak mümkündür ve daha sonra b'nin True olduğu önceki beş satırı seçebilir (böylece 16,16,10,7 ve 4'ü seçebilir). Bu 'göreli' yer olarak adlandırırdım. (? Bunun için daha iyi bir terim ben arama bu türü hakkında okuyabilirsiniz bir yer var mı?)Pandalarda bağıl sıra seçimi?

a  | b 
============= 
0  True 
1  False 
4  True 
7  True 
9  False 
10  True 
13  True 
16  True 
18  False 
19  True 
+0

düzenleyebilirsiniz Biraz garip göründüğü gibi, aynı zamanda satır 16 bir sütun veya bir indeks değeri mi? – EdChum

+0

Bu koşula uyan ilk 5 satırı seçmeye mi çalışıyorsunuz? Veya ilk 5 satırda, sadece bu durumla eşleşenler mi? – northsideknight

+0

@EdChum Yeniden biçimlendirdim – Private

cevap

2

bu deneyin: elemanının

endeksi: adım

In [31]: df.ix[(df.b) & (df.index < df[df.a == 19].index[0])].tail(5) 
Out[31]: 
    a  b 
2 4 True 
3 7 True 
5 10 True 
6 13 True 
7 16 True 

Adım nerede bir == 19:

In [32]: df[df.a == 19].index[0] 
Out[32]: 9 

şimdi hangi indeks b is True ve daha az th tüm öğeleri listeleyebilirsiniz Bir 9:

In [30]: df.ix[(df.b) & (df.index <9)].tail(5) 
Out[30]: 
    a  b 
2 4 True 
3 7 True 
5 10 True 
6 13 True 
7 16 True 

şimdi ikisini de birleştirir: biraz

In [33]: df.ix[(df.b) & (df.index < df[df.a == 19].index[0])].tail(5) 
Out[33]: 
    a  b 
2 4 True 
3 7 True 
5 10 True 
6 13 True 
7 16 True 

Hız o kadar: o var bu yüzden

In [103]: idx19 = df[df.a == 19].index[0] 

In [104]: idx19 
Out[104]: 9 

In [107]: %timeit df.ix[(df.b) & (df.index < df[df.a == 19].index[0])].tail(5) 
1000 loops, best of 3: 973 µs per loop 

In [108]: %timeit df.ix[(df.b) & (df.index < idx19)].tail(5) 
1000 loops, best of 3: 564 µs per loop 

PS% 42 daha hızlı

+0

Bu büyük ölçüde beklenenleri yapar, ancak gerçekten yavaştır. Bunu hızlandırmanın bir yolu var mı? – Private

+0

@Private, cevabımı güncelledim - lütfen kontrol edin – MaxU