我有这个数据框:
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
并且不返回字典的“值”。我的问题是如何将索引拆分为任意长度并获得多列?
答案 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"))
答案 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]])