2017-04-19 1 views
3

비 구분 팬더 다중 인덱스로 인덱스를 분할하는 방법 :나는이 데이터 프레임이

index   0 
idxaa1cx1 some_text 
idxbb2cx2 some_text 
idxcc3cx3 some_text 

난과 같이 다중 인덱스로 인덱스를 분할 할 :

idx_1  idx_2  0 
    idxa  a1cx1  some_text 
    idxb  b2cx2  some_text 
    idxc  c3cx3  some_text 

I을

df.index = pd.MultiIndex.from_tuples([tuple(idx.split(idx[:3][-5:])) for idx in df.index]) 

반환 :

이 시도했습니다 '

이지만 idx_1 열은 비어 있습니다. 그리고 나는 또한 시도했다 :

idx_1  0 
idxa  some_text 
idxb  some_text 
idxc  some_text 

및 사전의 "값"을 반환하지 않습니다 만 반환

df.index = pd.MultiIndex.from_tuples([tuple({idx[:3]:idx[-5:]}) for idx in df.index]) 

합니다. 내 질문에 어떻게 색인을 임의의 길이로 분할하고 여러 열을 얻을 수 있습니까?

답변

3

당신은 pd.MultiIndex.from_arrays를 사용할 수 있습니다

df.index = pd.MultiIndex.from_arrays([df.index.str[:4], df.index.str[-5:]]) 
df.rename_axis(("idx_1", "idx_2")) 

enter image description here

+0

이전에 '.from_arrays()'을 보지 않았습니다. +1 – bernie

+1

나도 독창성에 +1. @bernie 감사합니다. 튜플을 만들 수있을 때 아무것도 분할 할 필요가 없었습니다. – e9e9s

2

매우 가까웠습니다.

당신은 할 수 있습니다 :

df.index = pd.MultiIndex.from_tuples([((idx[3:],idx[-5:])) for idx in df.index]) 

결과 :

>>> df.index 
MultiIndex(levels=[[u'aa1cx1', u'bb2cx2', u'cc3cx3'], [u'a1cx1', u'b2cx2', u'c3cx3']], 
      labels=[[0, 1, 2], [0, 1, 2]]) 
3

미니멀 응용 프로그램을 바퀴벌레

df.index = [df.index.str[:4], df.index.str[-5:]] 
df 

        0 
index index   
idxa a1cx1 some_text 
idxb b2cx2 some_text 
idxc c3cx3 some_text 
관련 문제