python環境におけるnumpy arrayやpandas dataframeから,指定した値に最も近い値のインデックス番号を検索する方法についてまとめてみました。
(本ページにて紹介しているコードはgithubにて公開しています。)
DataAnalOji.hatena.sample/python_samples/blog_search_closest_index.ipynb at master · Data-Anal-Ojisan/DataAnalOji.hatena.sample
samples for my own blog. Contribute to Data-Anal-Ojisan/DataAnalOji.hatena.sample development by creating an account on GitHub.
Pandasの場合
サンプルデータの作成
import pandas as pd
df = pd.DataFrame({"column": [1, 2, 3, 4, 5, 6, 7, 8, 9]})
display(df)
(インデックス番号) | column |
---|---|
0 | 1 |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
5 | 6 |
6 | 7 |
7 | 8 |
8 | 9 |
指定値に最も近い値のインデックスを取得
指定した値に対してインデックス番号を検索したい列から指定値を引き (-num),その絶対値を取ったもの (.abs()) のインデックス番号をに並び替え (.argsort()),その先頭に来るインデックス番号を取得しています。
num = 4 # 値の指定
# 指定値に最も近い値のインデックスを取得
index = df.index[(df["column"]-num).abs().argsort()][0].tolist()
print("index number: ", index)
index number: 3
Numpyの場合
サンプルデータの作成
import numpy as np
ndarray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
display(ndarray)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
指定値に最も近い値のインデックスを取得
インデックス番号の取得手順はPandasのものと同様です。
num = 4 # 値の指定
# 指定値に最も近い値のインデックスを取得
index = np.abs(ndarray - num).argsort()[0].tolist()
print("index number: ", index)
index number: 3
コメント