如何使用非分隔符pandas将索引拆分为多索引

时间:2017-04-19 18:49:44

标签: python pandas dataframe

我有这个数据框:

   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 个答案:

答案 0 :(得分:4)

您可以使用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

答案 1 :(得分: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

答案 2 :(得分: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]])