2012-10-25 50 views
3

我想修改層次索引的特定級別上某些行的DataFrame條目。下面是一個典型的例子:pandas:不帶副本的分層索引上的片段

>>> 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變更值)。

回答

4

最近版本的熊貓help(data.xs)顯示瞭如何查看數據。

可以通過使用xs arg copy=False來完成。

+0

感謝您的建議。它似乎與單級索引一起工作良好,但它不適用於多索引。我的熊貓版本是0.9.0 – btel

+0

似乎是一個問題,我爲它打開了一個問題https://github.com/pydata/pandas/issues/2117 –

+0

感謝您的報告。有沒有解決之前我可以申請的工作? – btel