2017-10-10 2 views
1

큰 데이터 프레임 df에 대한 고유 한 요소로 구성된 indices의 전체 목록이 df.index입니다. 이제 요소별로 색인화 된 모든 하위 데이터 프레임 목록을 indices에 만들고 싶습니다. 특히팬더 데이터 프레임을 하위 데이터 프레임으로 분할하는 가장 빠른 방법

list_df = [df.loc[x] for x in indices] 

하지만 나이 (df3e6 행 및 3e3 고유 인덱스를 가지고) 복용이 명령을한다 실행합니다. 이 작업을 수행하는 합리적인 방법입니까? 이 문제와 관련 문제를 개선 할 수있는 의견이나 제안이 있으면 매우 기쁩니다.

미리 감사드립니다.

당신은 인덱스 groupby 객체에 지능형리스트를 사용할 수 있습니다
+0

downvoter 날 방법을 알려 수 있다면 내가 기쁠 내 질문을 향상 시키십시오. 감사! –

답변

1

- level=0sort=False 변경 기본적으로 빠른 솔루션을 정렬 :

L = [x for i, x in df.groupby(level=0, sort=False)] 

np.random.seed(123) 
N = 1000 
L = list('abcdefghijklmno') 
df = pd.DataFrame({'A': np.random.choice(L, N), 
        'B':np.random.randint(10, size=N)}, index=np.random.randint(100, size=N)) 

In [273]: %timeit [x for i, x in df.groupby(level=0, sort=False)] 
100 loops, best of 3: 9.91 ms per loop 

In [274]: %timeit [df.loc[x] for x in df.index] 
1 loop, best of 3: 417 ms per loop 
+0

매우 빠른 답장을 보내 주셔서 감사합니다! 이 솔루션이 더 빠르면 시도해 보겠습니다. –

+0

나는 goinfg 약간 시험이다, 나는 대답을 잠시 편집한다. – jezrael

+0

감사합니다. 이것이 일어난 이유를 설명해 주시겠습니까? –

관련 문제