2014-01-21 3 views
1

인덱스 및 열 목록을 제공하면 lookup() 메서드를 사용하여 pandas DataFrame의 요소를 쉽게 추출 할 수 있습니다. 지정된 데이터 프레임에서 부울 연산을 적용한 후와 같이 인덱스 및 열의 정렬 된 목록을 가져 오는 방법이 있습니까? 명확히하기 위해, 나는 그들의 정수 위치뿐만 아니라 인덱스와 컬럼의 이름을 원한다.pandas의 역 조회 : 행 및 열 이름의 정렬 된 목록을 얻습니다.

In [137]: df = pandas.DataFrame({"a":range(3), "b":range(10,13), "c":range(20,23)}, index=list("ABC")) 

In [138]: df 
Out[138]: 
    a b c 
A 0 10 20 
B 1 11 21 
C 2 12 22 

In [139]: df % 3 == 0 
Out[139]: 
     a  b  c 
A True False False 
B False False True 
C False True False 

In [140]: numpy.where(df % 3 == 0) 
Out[140]: (array([0, 1, 2]), array([0, 2, 1])) 

In [141]: iindices, icolumns = numpy.where(df % 3 == 0) 

In [142]: indices = df.index[iindices] 

In [143]: columns = df.columns[icolumns] 

내가 찾고 결과 : 볼에 쉽게

In [144]: indices, columns 
Out[144]: 
(Index([u'A', u'B', u'C'], dtype='object'), 
Index([u'a', u'c', u'b'], dtype='object')) 

대체 형태가 일그러 조금 비록

이, 내가 가지고 올 한 가장 가까운 눈으로 :

In [145]: zip(indices, columns) 
Out[145]: [('A', 'a'), ('B', 'c'), ('C', 'b')] 

(시간/t의 Python - find integer index of rows with NaN in pandas)

,745 에 대해
+0

을/questions/20935264/finding-bogus-data-in-a-pandas-dataframe/20936428 # 20936428 –

+0

이것은 [COO 형식]과 같습니다 (https://en.wikipedia.org/wiki/Sparse_matrix#Coordinate_list_ (COO)). : 여기서'value'가 필요하지 않은'(행 이름, 열 이름, 값)'의 튜플 목록으로 데이터 프레임 (/ 행렬)을 나타냅니다. 더 정확한 제목을 편집 할 수 있습니까? – smci

답변

4

방법 :

>>> s = df.stack() 
>>> s[s % 3 == 0].index.tolist() 
[('A', 'a'), ('B', 'c'), ('C', 'b')] 

단계별 먼저 우리는 스택 :

>>> s = df.stack() 
>>> s 
A a  0 
    b 10 
    c 20 
B a  1 
    b 11 
    c 21 
C a  2 
    b 12 
    c 22 
dtype: int64 

선택 :

>>> s % 3 == 0 
A a  True 
    b False 
    c False 
B a False 
    b False 
    c  True 
C a False 
    b  True 
    c False 
dtype: bool 

사용이 시리즈를 필터링 :

01 2,

인덱스 가져 오기 :

>>> s[s % 3 == 0].index 
MultiIndex(levels=[[u'A', u'B', u'C'], [u'a', u'b', u'c']], 
      labels=[[0, 1, 2], [0, 2, 1]]) 

그리고 우리가 찾고있는 값 : http://stackoverflow.com : 여기에 DSM의 다음과 유사한 응답 (비슷한 질문입니다

>>> s[s % 3 == 0].index.tolist() 
[('A', 'a'), ('B', 'c'), ('C', 'b')]