2013-06-20 2 views
8

팬더에서 일부 속성을 충족시키는 항목에 대한 계열/데이터 프레임의 색인 목록을 얻으려면 어떻게해야합니까?일부 조건을 만족하는 색인 ​​얻기

다음 반환 같이 보이는 Series 객체

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 

하지만 내가 원하는 것은 두 목록의와

[519, 516] 

와 하나의 하나입니다 인덱스의 나머지. 팬더에서 어떻게 이럴 수 있지? @ 제프의 예에

+0

itertools.filter를 (람다 X : X [1], (my_dataframe.loc의 [: 'somecolumn'] == 'some_value')) – lucasg

답변

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, 내가 게시 한 후 편집했습니다. 어떤 이유로 든 인덱스에서 부울 슬라이스 대신'.nonzero()'를 사용하고 있습니까? – TomAugspurger

+0

... 또는'x [~ x]':) –

+0

마음에 들었던 첫 번째 일은 .... 변하지 ... 너희들 말이 맞아. – Jeff

3

약간 변이체

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'을 어떻게 얻습니까? 내가 가지고있는 것은 OP에서와 같이'my_dataframe.loc [:, 'some_column'] == 'some_value''입니다. 감사합니다, –

+1

@ user815423426 doh 죄송합니다. 붙여 넣기 복사시 놓친 것입니다. 이제 해결되었습니다. 당신은 여전히 ​​== some_value를 수행합니다. 중요한 부분은 당신이 조각내는 인덱스입니다. – TomAugspurger

관련 문제