假设我有一个带MultiIndex的DataFrame,如下所示:
In [1]:d=pnd.DataFrame(range(5),index=pnd.MultiIndex.from_tuples([('A',1),('A',2),('A',3),('A',4),('A',5)]))
In [2]: d
Out[2]:
0
A 1 0
2 1
3 2
4 3
5 4
我可以通过子集创建另一个DataFrame:
In [3]: p=d.loc[('A',slice(1,3)),:].copy()
In [4]: p
Out[4]:
0
A 1 0
2 1
3 2
但是这个新DataFrame的索引对象与原始DataFrame的索引对象相同(包含'levels'中的所有原始项目)。
In [5]: p.index
Out[5]:
MultiIndex(levels=[[u'A'], [1, 2, 3, 4, 5]],
labels=[[0, 0, 0], [0, 1, 2]])
如何复制出一个不“记住”原始DataFrame的索引对象的子集?
我需要这个的原因是因为我的一些函数访问索引对象以获取元数据,并且索引从原始DataFrame转移的事实使这些函数混淆。
答案 0 :(得分:2)
如果您不关心子集中索引的顶级,则可以设置
p.index = p.index.droplevel()
p.index
Int64Index([1, 2, 3], dtype='int64')
或者,如果您想保留多索引并重置级别,可以调用set_levels
:
p.index = p.index.set_levels(p.index.droplevel(),1)
p.index
MultiIndex(levels=[['A'], [1, 2, 3]],
labels=[[0, 0, 0], [0, 1, 2]])