2017-05-10 1 views
2

こんにちは、ここで私は理解できない動作の例です。pandas Multiindex columnsメソッドの選択では、サブセットの代わりにすべての列が返されます

df.loc[:, ['bar']].columns 

戻り

MultiIndex(levels=[['bar'], ['one', 'two']], 
      labels=[[0, 0], [0, 1]], 
      names=['first', 'second']) 
:ここ は、今私は、最初のレベルでDFのサブセットを選択したいと関連する列を返したい列

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], 
      ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] 
tuples = list(zip(*arrays)) 
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) 

df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index) 

におけるマルチインデックスの一例です

しかし、

df.loc[:, ['bar', 'baz']].columns 

戻り

MultiIndex(levels=[['bar', 'baz', 'foo', 'qux'], ['one', 'two']], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]], 
      names=['first', 'second']) 

秒1ではなく、より重要なの

MultiIndex(levels=[['bar', 'baz'], ['one', 'two']] etc... 

し、任意のクイックフィックスのすべての列名ので、私は関連データのみを返すことができますが返されますなぜ任意の理由は?パンダが新しいパンダのバージョンで

答えて

2

を(多次元データを格納するための非常にエレガントな方法にするために使用)パネルを卑下しているよう

これはさらに、関連行われる(0.20.1MultiIndex.remove_unused_levelsを使用します。

print (df.loc[:, ['bar', 'baz']].columns) 
MultiIndex(levels=[['bar', 'baz', 'foo', 'qux'], ['one', 'two']], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]], 
      names=['first', 'second']) 

print (df.loc[:, ['bar', 'baz']].columns.remove_unused_levels()) 
MultiIndex(levels=[['bar', 'baz'], ['one', 'two']], 
      labels=[[0, 0, 1, 1], [0, 1, 0, 1]], 
      names=['first', 'second']) 

Advanced shown levels in documentation

+0

ワウ。それは新しいバージョンの良い発見です。 +1 –

+0

@ScottBoston - はい、正確です。ありがとう。 – jezrael

+0

ありがとうございました。これは非常に奇妙な行動です、それは1つまたは多くのために同じように動作しません与えられます。 –

関連する問題