Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get indices that satisfy some criteria

Tags:

python

pandas

In Pandas, how can I get a list of indices of a series/dataframe for the entries that satisfy some property?

The following returns a Series object

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

that looks like this:

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

but what I want is two lists, one with

[519, 516]

and one with the rest of indices. How can I do this in Pandas?

like image 660
Amelio Vazquez-Reina Avatar asked Jun 20 '13 14:06

Amelio Vazquez-Reina


1 Answers

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)
like image 85
Jeff Avatar answered Oct 17 '22 07:10

Jeff