2016-07-26 14 views
2

私のデータフレーム内の特定のデータを選択するためにpandasによってメソッドxsを使用するときは、(選択肢に限定された)適切なインデックスを取得するのが苦労しています。私がやっているものを、私が証明してみましょう:pandas multiindexを選択する方法...選択肢に限定する方法

print(df) 
                  value 
idx1    idx2   idx3   idx4 idx5    
10    2.0   0.0010   1  2  6.0 ... 
               2  3  6.0 ... 
... 
               7  8  6.0 ... 
               8  9  6.0 ... 
20    2.0   0.0010   1  2  6.0 ... 
               2  3  6.0 ... 
... 
               18 19  6.0 ... 
               19 20  6.0 ... 

# get dataframe for idx1 = 10, idx2 = 2.0, idx3 = 0.0010 
print(df.xs([10,2.0,0.0010])) 

      value 
idx4 idx5    
1  2  6.0 ... 
2  3  6.0 ... 
3  4  6.0 ...  
4  5  6.0 ...  
5  6  6.0 ...  
6  7  6.0 ...  
7  8  6.0 ... 
8  9  6.0 ... 

# get the first index list of this part of the dataframe 
print(df.xs([10,2.0,0.0010]).index.levels[0]) 

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19] 

をだから私は理解していない、なぜidx4で発生した値の完全なリストは、我々はidx4のみ1から値を取る部分にデータフレームを制限していても返されます私はindexメソッドを間違った方法で使用していますか?

+0

外観質問/ 32585009/dataframe-slice-does-not-remove-index-values – desiato

答えて

1

これは既知の機能であり、バグではありません。パンダはすべてのインデックス情報を保持します。 labels属性を使用して、どのレベルがどの位置で表現されているかを判断できます。 http://stackoverflow.com/:

あなたが新鮮で、ただあなただけ作られたスライスに関連する情報が含まれているインデックスを作成するために探しているなら、あなたはこれを行うことができます:で

df_new = df.xs([10,2.0,0.0010]) 
idx_new = pd.MultiIndex.from_tuples(df_new.index.to_series(), 
            names=df_new.index.names) 
df_new.index = idx_new 
関連する問題