2014-05-15 2 views
4

팬더 데이터 프레임을 사용하여 numpy 배열의 동작을 복제하려고합니다. 인덱스 및 열 이름 배열을 전달하고 해당 인덱스 및 열 이름에서 찾을 수있는 개체 목록을 얻고 싶습니다.인덱스 및 열 이름 배열로 팬더 데이터 프레임 분할

array=np.array(range(9)).reshape([3,3]) 
print array 
print array[[0,1],[0,1]] 

[[0 1 2] 
[3 4 5] 
[6 7 8]] 

[0 4] 

팬더에서 : NumPy와에서

import pandas as pd 
import numpy as np 

prng = pd.period_range('1/1/2011', '1/1/2013', freq='A') 
df=pd.DataFrame(array,index=prng) 
print df 

     0 1 2 
2011 0 1 2 
2012 3 4 5 
2013 6 7 8 

df[[2011,2012],[0,1]] 

예상 출력 :이 같은 돌아 갈 수있는 나는이 dataframe을 슬라이스하는 방법

[0 4] 

멍청한거야?

+0

엄밀히, 즉 (행 안부) 인덱스의 배열,하지만 ** 다차원 인덱스 배열이 아니다 (여기에 정수를 사용하지 마십시오). 내 이해가 정확하다면 그에 맞게 제목을 편집하십시오. – smci

답변

6

팬더는 이것을 직접 지원하지 않습니다. 하지만 문제는 다른 축 대신 좌표를 지정하는 방법입니다. df.iloc[[0,1],[0,1]]은 을 의미하고 0과 1 행, 0과 1 열을 제공합니다. 말했다

, 당신은이 작업을 수행 할 수 있습니다 : 당신은 질문을 업데이트 인덱스로 시작하고 싶은 말은

In [19]: row_indexer = df.index.get_indexer([Period('2011'),Period('2012')]) 

In [20]: col_indexer = df.columns.get_indexer([0,1]) 

In [21]: z = np.zeros(df.shape,dtype=bool) 

In [22]: z[row_indexer,col_indexer] = True 

In [23]: df.where(z) 
Out[23]: 
     0 1 2 
2011 0 NaN NaN 
2012 NaN 4 NaN 
2013 NaN NaN NaN 

(이러한 위치이다)하지만이 쉽게 보인다

In [63]: df.values[[0,1],[0,1]] 
Out[63]: array([0, 4]) 

또는이; 기간 인덱스가 문자열에서 제대로 슬라이스 될 것이다 **

In [26]: df.loc['2011',0] 
Out[26]: 0 

In [27]: df.loc['2012',1] 
Out[27]: 4 
+0

사실 저의 질문은 저조했습니다. 슬라이스 할 인덱스 및 열 이름을 사용하려고합니다.이를 반영하기 위해 제 질문을 편집했습니다. 불분명하게해서 유감입니다. –

관련 문제