2015-01-25 4 views
4

다중 색인 DataFrame에서 하나의 색인 만 사용하여 새 DataFrame을 만들려고합니다.다중 색인 DataFrame의 하나의 색인 만 선택

In: df.ix[level="first"] 

과 :

Out: 

       A   B   C 
first        
bar  0.895717 0.410835 -1.413681 
      0.805244 0.813850 1.607920 
baz  -1.206412 0.132003 1.024180 
      2.565646 -0.827317 0.569605 
foo  1.431256 -0.076467 0.875906 
      1.340309 -1.187678 -2.211372 
qux  -1.170299 1.130127 0.974466 
      -0.226169 -1.436737 -2.006747 
` 

는 기본적으로 나는 수준 first 이외의 멀티 인덱스의 다른 모든 인덱스를 드롭 할

    A   B   C 
first second        
bar one  0.895717 0.410835 -1.413681 
     two  0.805244 0.813850 1.607920 
baz one -1.206412 0.132003 1.024180 
     two  2.565646 -0.827317 0.569605 
foo one  1.431256 -0.076467 0.875906 
     two  1.340309 -1.187678 -2.211372 
qux one -1.170299 1.130127 0.974466 
     two -0.226169 -1.436737 -2.006747 

적으로는, 내가 이런 식으로 뭔가를 싶습니다 . 이 작업을 수행하는 쉬운 방법이 있습니까?

답변

4

한 가지 방법은 df.index을 원하는 수준의 MultiIndex로 리 바인드하는 것일 수 있습니다.

df.index = df.index.get_level_values('first') 

또는 수준의 정수 값을 사용합니다 : 당신은 유지하려는 레이블 이름을 지정하여이 작업을 수행 할 수 있습니다 여기에 사라질 것 MultiIndex의

df.index = df.index.get_level_values(0) 

다른 모든 수준.

+0

I 이하 너와이 사이트를 사랑해! – Skorpeo

+0

http://stackoverflow.com/questions/29763620/how-to-select-all-columns-except-one-column-in-pandas-using-ix – Skorpeo

2

이 솔루션은 매우 새로운 및

df.xs 함수를 사용
In [88]: df.xs('bar', level='first') 
Out[88]: 
Second Third 
one  A  -2.315312 
     B  0.497769 
     C  0.108523 
two  A  -0.778303 
     B  -1.555389 
     C  -2.625022 
dtype: float64 

또한

In [89]: df.xs(('bar', 'A'), level=('First', 'Third')) 
Out[89]: 
Second 
one -2.315312 
two -0.778303 
dtype: float64 

로 여러 지표로 할 수있는 예제의 설정은

import pandas as pd 
import numpy as np 
arrays = [ 
    np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), 
    np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']) 
] 
index = pd.MultiIndex.from_tuples(list(zip(*arrays)), names=['first', 'second']) 
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index) 
df.index.names = pd.core.indexes.frozen.FrozenList(['First', 'Second', 'Third']) 
df = df.unstack()