2013-02-06 13 views
5

Więc mam DataFrame takiego:Pandy wykorzystaniem etykiet wierszy w logiczną indeksowania

df = pd.DataFrame(np.random.randn(6, 3), columns=['a', 'b', 'c']) 

     a   b   c 
0 1.877317 0.109646 1.634978 
1 -0.048044 -0.837403 -2.198505 
2 -0.708137 2.342530 1.053073 
3 -0.547951 -1.790304 -2.159123 
4 0.214583 -0.856150 -0.477844 
5 0.159601 -1.705155 0.963673 

Możemy Boolean indeks to tak

df[df.a > 0] 

    a   b   c 
0 1.877317 0.109646 1.634978 
4 0.214583 -0.856150 -0.477844 
5 0.159601 -1.705155 0.963673 

Możemy również pokroić go za pomocą etykiet wierszy takich jak ta:

df.ix[[0,2,4]] 

    a   b   c 
0 1.877317 0.109646 1.634978 
2 -0.708137 2.342530 1.053073 
4 0.214583 -0.856150 -0.477844 

Chciałbym wykonywać obie te czynności w tym samym czasie (unikam tworzenia niepotrzebnej kopii tylko po to, aby wykonać etykietę wiersza f ilter). Jak miałbym to zrobić?

Pseudo kod do czego szukam:

df[(df.a > 0) & (df.__index__.isin([0,2,4]))] 
+0

Można spróbować z 'df.ix [df [ 'a']> 0 [ 0,2,4]] ' – nemesv

+0

Dla powyższej przykładowej ramki danych, która rzuciłaby wyjątek, ponieważ próbuje ona wyciągnąć 0, 2 i 4 kolumny, a mamy tylko 3 kolumny. – jason

Odpowiedz

6

Prawie miał go:

In [11]: df[(df.a > 0) & (df.index.isin([0, 2, 4]))] 
Out[11]: 
      a   b   c 
0 1.877317 0.109646 1.634978 
4 0.214583 -0.856150 -0.477844 
+0

Rzeczywiście! Prawie! Tam! – jason

Powiązane problemy