はじめに
最大値、最小値のインデックスを求めるには、pandasの場合、idxmax(), idxmin()がある。しかしながら中央値のインデックスを求めるidxmedian()はない。
ここでは、中央値のインデックスの求め方について説明する。
コード
要素数が偶数個の場合
![](https://sabopy.com/wp/wp-content/uploads/2019/01/gusu_median_idx.png)
要素数が奇数個の場合
![](https://sabopy.com/wp/wp-content/uploads/2019/01/kisu_median_idx.png)
解説
要素数が偶数個の場合
モジュールのインポート
notebook上で表示する行数の最大値を、pd.set_option(‘display.max_rows’, 20)で20行としている。
データの生成
numpy.random.rand(n) で 0 から1 の乱数をn個生成する。ここでは、n=100なので100個の乱数が生成する。
生成したdataをDataFrame化した。
中央値のインデックスをもとめる
最初に、dataからdataの中央値の値を引いた数の絶対値をとって、中央値が最小となる配列を作成して、それを.valuesにより、np.arrayに変換する。
要素数が偶数の場合、中央値は2つの中央値の平均となる。2つの中央値のインデクスをもとめるには、np.argpartitionを使う。使用例は↓を参照。
![](https://sabopy.com/wp/wp-content/uploads/2019/02/zougemaru-1.jpg)
np.argpartition(d_m, 2, axis=0)により、最も小さい要素の配列のインデクスを2個、配列の左側においた配列を生成するので、[0]と[1]にある要素が中央値のインデクスとなる。
最大値、最小値のインデックス
最大値、最小値のインデクスはそれぞれ、idxmax(), idxmin()で求まる。
図示
ax.plot(data.index[m1_ind],data.loc[m1_ind],’yo’,markersize=14,alpha=0.5, label=’median1′)のように、マーカーサイズを大きくして、透明度を0.5にすることで、図中のどの点が中央値であるかをわかりやすく表示している。
凡例については、plt.legend(bbox_to_anchor=(1.05, 1), loc=’upper left’, borderaxespad=0)とすることで、枠外に凡例を設置している。
bbox_to_anchorは凡例の相対的な位置の設定であり、図の枠の左下を(0,0)、右上を(1,1)としたときの相対的な位置を指定する。locはその位置を凡例の枠のどの部分で合わせるかの設定で、ここでは、左上の位置が(1.05,1)に来るように凡例を設定した。
borderaxespadは余白の設定。
要素数が奇数個の場合
要素数が奇数個の場合、中央値はひとつとなる。
その他にnp.where()などによる求め方がある。
中央値が複数ある場合は、np.whereを使ったほうが良い。
参考
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9bWF0cGxvdGxpYiUyMCVFMyU4MSVBRSUyMGxlZ2VuZCUyOCVFNSU4NyVBMSVFNCVCRSU4QiUyOSUyMCVFMyU4MSVBRSUyMCVFNCVCRCU4RCVFNyVCRCVBRSVFMyU4MiU5MiVFOCVBQSVCRiVFNiU5NSVCNCVFMyU4MSU5OSVFMyU4MiU4QiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9MjRkZmY2ZjY2NGQ3MDhlODY3MDZhZjVkNmZlYmU3NmQ&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBtYXRzdWktazIweHgmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWQ4MTBjYmQ5MDFhYjVkYmViODdlMGE1ZWFjNzY4Njdl&blend-x=142&blend-y=486&blend-mode=normal&s=c650f073e05b1757ef979c0ca7cf1527)
コメント