pandasの2次元配列から、1の値が入っている行、列番号を列挙する方法


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)




[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]




[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]

