スタック・オーバーフロー Asked by ktakita on November 20, 2021
2値の値が入っているnumpy arrayがあります。
そのarrayから1の値が入っている行と列番号を列挙したいです。
イメージ
以下のようなdataframeデータがあるとします
df = pd.DataFrame(np.array([[0,0,1],[1,0,1],[4,0,1]]))
df.index = [0, 1, 4]
これは以下のような表になると思います。
これを以下のように1の場所のみを抽出してarryaにするプログラムを作成したいです。
実際は100*800の2次元配列なので、プログラムで自動化したいです。
numpy.where()を使うと以下の様になります。
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
Answered by user39889 on November 20, 2021
2重ループで該当の座標を抽出する方法です。
※質問コメントの通り、ご質問の抽出結果は(index, x, y)=(4, 2, 4)の誤植と想定した回答です。
サンプルコード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)
出力結果
x y
0 0 1
1 2 0
2 2 1
3 2 4
本家SOの関連質問
Answered by payaneco on November 20, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP