2012-10-25 5 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 

I가 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

최근 팬더 버전 에서 데이터보기를 얻는 방법을 보여줍니다.

xs arg copy=False을 사용하여 수행 할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 그것은 단일 수준 인덱스와 함께 잘 작동하는 것 같지만 다중 인덱스에서는 작동하지 않습니다. 내 팬더 버전은 0.9.0 – btel

+0

입니다. 문제가 될 것 같습니다. 문제가 발생했습니다. https://github.com/pydata/pandas/issues/2117 –

+0

신고 해 주셔서 감사합니다. 그것이 해결되기 전에 제가 적용 할 수있는 일이 있습니까? – btel