pythonで指定値に最も近い値のインデックス検索

magnifying glass on book

実践Data Scienceシリーズ RとStanではじめる ベイズ統計モデリングによるデータ分析入門 (KS情報科学専門書)

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
01
12
23
34
45
56
67
78
89

指定値に最も近い値のインデックスを取得

指定した値に対してインデックス番号を検索したい列から指定値を引き (-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

実践Data Scienceシリーズ RとStanではじめる ベイズ統計モデリングによるデータ分析入門 (KS情報科学専門書)

コメント