68832


2値の値が入っているnumpy arrayがあります。  
そのarrayから1の値が入っている行と列番号を列挙したいです。

イメージ

以下のようなdataframeデータがあるとします

[code]

    df = pd.DataFrame(np.array([[0,0,1],[1,0,1],[4,0,1]]))
    df.index = [0, 1, 4]
    
[/code]

これは以下のような表になると思います。  
[![画像の説明をここに入力](https://i.stack.imgur.com/cE4hB.png)](https://i.stack.imgur.com/cE4hB.png)  
これを以下のように1の場所のみを抽出してarryaにするプログラムを作成したいです。  
実際は100*800の2次元配列なので、プログラムで自動化したいです。

[![出力したい内容](https://i.stack.imgur.com/cHwbk.png)](https://i.stack.imgur.com/cHwbk.png)


CC BY-SA 4.0
2020-07-22T06:41:02.360
68818
2020-07-27T05:24:54.507
2020-07-27T05:24:54.507
29536
29536
question
python pandas numpy
pandasの2次元配列から、1の値が入っている行、列番号を列挙する方法


2重ループで該当の座標を抽出する方法です。

※質問コメントの通り、ご質問の抽出結果は(index, x, y)=(4, 2, 4)の誤植と想定した回答です。

サンプルコード

[code]

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.array([[0,0,1],[1,0,1],[4,0,1]]))
    df.index = [0, 1, 4]
    
    list = []
    for c in df.columns:
        for i in df.index:
            if df.loc[i, c] == 1:
                list.append([c, i])
    
    locs = pd.DataFrame(np.array(list))
    locs.columns = ['x', 'y']
    print(locs)
    
[/code]

出力結果

[code]

       x  y
    0  0  1
    1  2  0
    2  2  1
    3  2  4
    
[/code]

本家SOの関連質問

  * [Get row and column in Pandas for a cell with a certain value](https://stackoverflow.com/q/53856763)
  * [Pandas - find index of value anywhere in DataFrame](https://stackoverflow.com/q/42386629)


CC BY-SA 4.0
2020-07-22T11:43:07.277
68831
2020-07-22T11:43:07.277
9820
68818
answer


[numpy.where()](https://numpy.org/doc/stable/reference/generated/numpy.where.html#numpy-
where)を使うと以下の様になります。

[code]

    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame(
      np.array([
        [0, 0, 1],
        [1, 0, 1],
        [4, 0, 1]
      ]), index=[0, 1, 4]
    )
    
    dfn = pd.DataFrame(
      [(df.columns[p[1]], df.index[p[0]]) for p in zip(*np.where(df == 1))],
      columns=('x', 'y')
    )
    dfn.index += 1
    
    print(dfn)
    
       x  y
    1  2  0
    2  0  1
    3  2  1
    4  2  4
    
[/code]


CC BY-SA 4.0
2020-07-22T11:55:54.857
68832
2020-07-22T11:55:54.857
68818
answer