2017-04-19 59 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 

我已經試過這樣:

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

返回:

idx_1 idx_2  0 
      a1cx1  some_text 
      b2cx2  some_text 
      c3cx3  some_text 

但idx_1列爲空白。而且我也試過:

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

僅返回:

idx_1  0 
idxa  some_text 
idxb  some_text 
idxc  some_text 

,不返回字典中的 「價值」。我的問題是如何分割索引的任意長度,並獲得多個列?

回答

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

極簡的應用roach

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