pandas.DataFrame的子集(切片)与原始DataFrame具有相同的索引

时间:2015-08-05 22:09:58

标签: python pandas

假设我有一个带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转移的事实使这些函数混淆。

1 个答案:

答案 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]])