pandas:对没有副本的分层索引进行切片

时间:2012-10-25 12:26:14

标签: python pandas data-analysis

我想在层次索引的特定级别修改某些行的DataFrame条目。这是一个典型的例子:

>>> index = pd.MultiIndex.from_arrays([['a','a', 'b', 'b'], [1,2,1,2]], 
...                                   names=['first', 'second'])
>>> data = pd.DataFrame(np.random.rand(len(index)), index=index, columns=['A'])
>>> print data
                     A
first second          
a     1       0.587781
      2       0.560407
b     1       0.492996
      2       0.267799

我想将second==2设置为0的行(例如)。我尝试使用DataFrame.xs方法,但它返回一个副本而不是视图:

>>> selected = data.xs(2, level='second')
>>> print selected
              A
first          
a      0.560407
b      0.267799

>>> selected['A']=0
>>> print data

                    A
first second          
a     1       0.587781
      2       0.560407
b     1       0.492996
      2       0.267799

上一次分配不会影响data(当然,它更改了selected中的值)。

1 个答案:

答案 0 :(得分:4)

最近版本的pandas help(data.xs)显示了如何获取数据视图。

可以使用xs arg copy=False

来完成