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