2016-06-26 11 views
1

データフレーム内のいくつかの条件に一致する値の行ラベルと列ラベルを取得したいとします。それを面白く保つために、階層型(マルチ)インデックスで作業する必要があります。たとえば:Pandasデータフレームで選択した値の行と列のラベルを取得します。

df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=pd.MultiIndex.from_product((('a', 'b'), ('x', 'y')))) 

    a  b  
    x y x y 
0 0 1 2 3 
1 4 5 6 7 
2 8 9 10 11 
3 12 13 14 15 

は、今度は私が

[(0, ('a', 'x')), (1, ('b', 'x')), (3, ('a', 'x'))] 

は私がをしたいと思いますのでご注意ください取得したいと思い

df % 6 == 0 

     a    b  
     x  y  x  y 
0 True False False False 
1 False False True False 
2 False False False False 
3 True False False False 

要素の行と列のラベルをしたいとしましょう単調な索引に依存しない、または私の例での特定の選択に依存しない一般的なソリューションです。この質問は何度も頼まれていますが、答えは一般化していない:

を使用しています:
  • Pandas: Get each value's index and columns valuesを一般化しません。

    パンダでこれは本当に難しいですか?

  • 答えて

    2

    使用np.where真値の序数インデックス取得する:

    import numpy as np 
    import pandas as pd 
    df = pd.DataFrame(np.arange(16).reshape(4, 4), 
            columns=pd.MultiIndex.from_product((('a', 'b'), ('x', 'y')))) 
    
    mask = (df % 6 == 0) 
    i, j = np.where(mask) 
    print(list(zip(df.index[i], df.columns[j]))) 
    

    利回り

    [(0, ('a', 'x')), (1, ('b', 'x')), (3, ('a', 'x'))] 
    
    関連する問題