2013-06-20 14 views
8

Pandalar'da, bazı özelliklerin karşılandığı girişler için bir seri/veri çerçevesinin indis listesini nasıl alabilirim?Bazı ölçütleri karşılayan göstergeler alın

aşağıdaki döner şöyle bir Series nesne

my_dataframe.loc[:,'some_column'] == 'some_value' 

:

519  True 
509 False 
826 False 
503 False 
511 False 
512 False 
500 False 
507 False 
516  True 
504 False 
521 False 
510 False 
351 False 
522 False 
526 False 
517 False 
501 False 

ama ne istediğiniz iki listeleri, ile

[519, 516] 

ve biriyle biridir endekslerin geri kalanı. Bunu Pandalarda nasıl yapabilirim? @ Jeff'ın örnekte

+0

itertools.filter (lambda x: x [1], (my_dataframe.loc [: 'somecolumn'] == 'some_value') – lucasg

cevap

10
In [8]: df = DataFrame(randn(10,2),columns=list('AB')) 

In [9]: df 
Out[9]: 
      A   B 
0 -1.046978 1.561624 
1 -0.264645 0.717171 
2 0.112354 -2.084449 
3 -1.243482 -1.183749 
4 1.055667 0.532444 
5 -1.295805 2.168225 
6 -1.239725 0.969934 
7 -0.354017 1.434943 
8 -0.867560 0.810315 
9 0.097698 -0.033039 

In [10]: df.loc[:,'B'] > 0 
Out[10]: 
0  True 
1  True 
2 False 
3 False 
4  True 
5  True 
6  True 
7  True 
8  True 
9 False 
Name: B, dtype: bool 

In [14]: x = df.loc[:,'B'] > 0 

Per Tom/Andy, much simpler 

In [33]: x[x].index 
Out[33]: Int64Index([0, 1, 4, 5, 6, 7, 8], dtype=int64) 

In [34]: x[~x].index 
Out[34]: Int64Index([2, 3, 9], dtype=int64) 
+0

Heh, gönderdikten sonra düzenlediniz. Dizinde boolean dilimi yerine '.nonzero()' kullanmanın herhangi bir nedeni var mı? – TomAugspurger

+0

... ya da 'x [~ x]' :) –

+0

akla ilk gelen şey .... wll değişim ... sizler haklısınız – Jeff

3

hafif bir varyantı

In [18]: df 
Out[18]: 
      A   B 
0 0.319489 1.
1 0.494205 -0.918240 
2 1.501922 -0.409661 
3 -1.593702 0.705407 
4 -0.735312 1.037567 
5 -0.201132 -0.673124 
6 1.237310 -0.877043 
7 -0.946714 0.984164 
8 -0.923548 0.415094 
9 0.135281 -0.199951 

In [14] list1 = df.index[df.loc[:, 'B'] > 0] 

In [15]: list1 
Out[15]: Int64Index([0, 3, 4, 7, 8], dtype=int64) 

In [16]: list2 = df.index - list1 

In [17]: list2 
Out[17]: Int64Index([1, 2, 5, 6, 9], dtype=int64) 
+0

'list1' nasıl elde edersiniz? Tek sahip olduğum, OP'deki gibi my_dataframe.loc [:, 'some_column'] == 'some_value'. Teşekkürler, –

+1

@ user815423426 doh özür dilerim. Kopyalama yaparken bunu kaçırdı. Şimdi sabit. Hala yapıyorsunuz == some_value, önemli olan kısım, dilimlemekte olduğunuz dizinin olmasıdır. – TomAugspurger

İlgili konular