2017-02-04 13 views
0

以下のマルチレベルDATAFRAME削除データフレームの列

import numpy as np 
import pandas as pd 
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']) 
s = pd.DataFrame(np.random.randn(8, 4), index=arrays) 
s 

は、私はどうすればよいindex_0バーとINDEX_1 2

で行全体を削除したいとしましょう考えてみましょうそうする?

答えて

1

あなたはdrop methodを使用することができます。

In [26]: s.drop(('bar','two'), axis=0) 
Out[26]: 
       0   1   2   3 
bar one -0.450943 -1.615345 -0.862521 1.042495 
baz one 1.200944 0.617102 -0.439342 -0.296142 
    two -0.879343 -1.055805 0.682381 2.625398 
foo one 0.191370 -0.212905 -0.415360 -1.437934 
    two 0.458979 1.072584 0.485136 1.498859 
qux one -2.137894 -0.872023 -0.382530 -0.550116 
    two -1.490523 -2.999998 0.290653 -0.848422 

axis=0は、(それがデフォルトだ)必要はありませんが、私はそれだけで我々が行ではなく、列をドロップしていることを明示することがあります。

In [55]: s.index.isin((('bar','two'),('baz','one'))) 
Out[55]: array([False, True, True, False, False, False, False, False], dtype=bool) 

、その後:あなたは、両方の ('bar','two')('baz','one')行を、複数の行を削除する例えば言いたかった場合


、あなたはブール値マスクを生成するためにisinを使用することができます行を選択しs.locを使用します。

In [56]: s.loc[~s.index.isin((('bar','two'),('baz','one')))] 
Out[56]: 
       0   1   2   3 
bar one -0.450943 -1.615345 -0.862521 1.042495 
baz two -0.879343 -1.055805 0.682381 2.625398 
foo one 0.191370 -0.212905 -0.415360 -1.437934 
    two 0.458979 1.072584 0.485136 1.498859 
qux one -2.137894 -0.872023 -0.382530 -0.550116 
    two -1.490523 -2.999998 0.290653 -0.848422 

~は、マスクSを反転booleanマスクがFalseの行を保持すること。

関連する問題