2014-04-27 4 views
0

필자는 MS Excel 피벗 테이블과 마찬가지로 피벗 테이블 모듈을 구현하고 있습니다. pandas 데이터 프레임 모듈을 사용하고 있습니다.데이터 프레임의 조회 값

내가 키에 의해 dataframe에서 값을 검색하는 방법을 궁금 어쨌든

....

경과 시간이 중요합니다.

아래 샘플 코드를 작성하십시오.

import pandas as pd 

def getTestDataFrame(): 
    data=[] 

    # generating 10000000 records 
    for i in range(10000): 
     for j in range(1000): 
      data.append((i ,j, i+j)) 


    dataFrame=pd.DataFrame(data, columns=["key_1", "key_2", "myvalue"]) 

    # setting index to key columns 
    dataFrame=dataFrame.set_index(['key_1','key_2']) 

    # data sample 
    print dataFrame.head() 

    return dataFrame 



if __name__ == "__main__": 

    myDataframe=getTestDataFrame() 

    for i in range(10000): 
     for j in range(1000): 
      key1, key2= i, j 
      ''' 
      how can i lookup "myvalue" column value 
       from "myDataframe" by key columns("key_1", "key_2")? 
      ''' 
      # elapsed time is critical 
      # please complete my code 
+1

대신 팬더의 buitin'pivot_table' 메소드를 사용하지 않으시겠습니까? –

+0

크기가 큰 데이터의 경우 pivot_table의 피벗 속도가 너무 느립니다. 그래서 groupby와 피봇 테이블 manualy를 구현하고 팬더 모듈을 녹입니다. –

답변

1

이 경우 올바른 팬더 조회 구문은 다음과 같습니다

if __name__ == "__main__": 

    myDataframe=getTestDataFrame() 

    for i in range(10000): 
     for j in range(1000): 
      key1, key2= i, j 

      myvalueOut = myDataframe.loc[key1,key2]['myvalue'] 

불행하게도, 난 정말 당신의 속도 문제로 많은 것을 말할 수 없다; 팬더는 조회를 수행하는 데 필요한 시간이 걸립니다. 그 일을 제어 할 수는 없습니다. 팬더 조회가 여전히 너무 느리게 실행되는 경우

그러나, 하나 명의 대안 데이터 구조 당신은 당신이 key1이 중첩의 첫 번째 레벨을 포함 할 있도록 구현하는 것 nested dictionary, 것, 대신 팬더의, 시도 할 수 있습니다 그 , key2은 두 번째를 포함합니다. 판다가 어떻게 내부적으로 작동하는지 잘 모르겠지만, 파이썬 사전은 기본적으로 단지 hash tables입니다. 파이썬 사전의 검색 시간은 항상 O (1)이어야합니다. 즉 가능한 한 가장 빠릅니다.

+0

코드를 테스트했습니다. 페이징 기능이있는 피벗 테이블을 만들 예정입니다. 현재 페이지 데이터 셀만 필요합니다. 너의 속도는 나의 모듈에 상당히 좋다. 많은 감사합니다. –

관련 문제