Pythonのidxmaxとは?最大値のインデックスを取得する方法をわかりやすく解説

Pythonでデータ分析をしていると、「最大値が入っている場所を取得したい」という場面があります。

特にPandasを使っている場合は、idxmax()を利用すると、最大値そのものではなく、最大値を持つ行や列のインデックスを簡単に取得できます。

この記事では、Pythonのidxmax()について、基本的な使い方から、DataFrameでの利用方法、max()との違い、複数の最大値がある場合の挙動まで、サンプルコードを使って詳しく解説します。


Pythonのidxmaxとは?

idxmax()は、PandasのSeriesやDataFrameで利用できるメソッドです。

最大値を持つ要素のインデックスを返します。

例えば、次のようなデータがあるとします。

import pandas as pd

s = pd.Series([10, 30, 20, 50, 40])

print(s.idxmax())

実行結果は次のようになります。

3

最大値は50で、その最大値が存在するインデックスが3だからです。

つまり、

値       10  30  20  50  40
index     0   1   2   3   4
                  ↑
                最大値

となります。


idxmax()の基本構文

Seriesの場合、基本的な構文は次のとおりです。

Series.idxmax()

主なポイントは、idxmax()が返すのは最大値ではなくインデックスであることです。

max()との違い

s.max()

は最大値を返します。

一方、

s.idxmax()

は最大値のインデックスを返します。

例えば、

import pandas as pd

s = pd.Series([10, 30, 20, 50, 40])

print(s.max())
print(s.idxmax())

実行結果:

50
3
メソッド 戻り値
max() 最大値
idxmax() 最大値のインデックス

「最大値はいくつ?」ならmax()、
「最大値はどの位置?」ならidxmax()と覚えると分かりやすいでしょう。


Seriesでidxmax()を使う

まずはPandasのSeriesで使ってみましょう。

import pandas as pd

scores = pd.Series(
    [65, 82, 91, 74, 88],
    index=["田中", "佐藤", "鈴木", "高橋", "伊藤"]
)

print(scores.idxmax())

実行結果:

鈴木

最大値は91で、対応するインデックスが鈴木だからです。

最大値そのものを取得する場合は、

print(scores.max())

とします。

実行結果:

91

idxmax()で最大値を持つ行を取得する

idxmax()を使うと、最大値を持つデータを特定できます。

例えば、商品の売上データを考えてみましょう。

import pandas as pd

sales = pd.Series(
    [120000, 250000, 180000, 320000, 210000],
    index=["商品A", "商品B", "商品C", "商品D", "商品E"]
)

product = sales.idxmax()

print(product)

実行結果:

商品D

最大売上の商品を取得できました。

最大売上金額も取得するなら、

print(sales.max())

とします。

320000

DataFrameでidxmax()を使う

idxmax()はDataFrameでも利用できます。

例えば、次のようなDataFrameを作ります。

import pandas as pd

df = pd.DataFrame({
    "Python": [80, 90, 75],
    "Ruby": [70, 85, 95],
    "Java": [88, 78, 92]
}, index=["田中", "佐藤", "鈴木"])

print(df)

実行結果:

    Python  Ruby  Java
田中     80    70    88
佐藤     90    85    78
鈴木     75    95    92

ここで、

print(df.idxmax())

を実行します。

結果:

Python    佐藤
Ruby      鈴木
Java      鈴木
dtype: object

これは各列について最大値を持つ行のインデックスを返しています。


axisを指定する

DataFrameのidxmax()では、axisを指定できます。

axis=0

デフォルトではaxis=0です。

df.idxmax(axis=0)

各列について最大値を持つ行のインデックスを返します。

Python    佐藤
Ruby      鈴木
Java      鈴木

axis=1

axis=1を指定すると、各行について最大値を持つ列名を取得できます。

print(df.idxmax(axis=1))

結果:

田中    Java
佐藤    Python
鈴木    Ruby
dtype: object

例えば「それぞれの生徒が最も得意な科目」を調べる場合に便利です。


idxmax()で最大値そのものを取得する

idxmax()はインデックスを返すため、最大値そのものが欲しい場合はmax()を使います。

ただし、idxmax()で取得したインデックスを利用して、最大値を取り出すこともできます。

index = scores.idxmax()

print(scores[index])

実行結果:

91

または、

print(scores.loc[scores.idxmax()])

としても取得できます。


DataFrameから最大値を持つ行を取得する

DataFrameで最大値を持つ行全体を取得したい場合にもidxmax()が使えます。

import pandas as pd

df = pd.DataFrame({
    "name": ["田中", "佐藤", "鈴木"],
    "sales": [100, 250, 180]
})

index = df["sales"].idxmax()

print(df.loc[index])

実行結果:

name     佐藤
sales     250
Name: 1, dtype: object

この方法を使えば、「売上が最大の社員の情報を取得する」といった処理ができます。


最大値の行を丸ごと取得する

先ほどの方法を少し応用すると、最大値を持つ行をDataFrame形式で取得できます。

index = df["sales"].idxmax()

print(df.loc[[index]])

結果:

  name  sales
1   佐藤    250

loc[[index]]のように二重の[]を使うことで、SeriesではなくDataFrameとして取得できます。


最大値が複数ある場合

idxmax()を使うときに注意したいのが、最大値が複数存在する場合です。

例えば、

import pandas as pd

s = pd.Series([100, 200, 300, 300, 150])

print(s.idxmax())

結果:

2

最大値300はインデックス2と3に存在しています。

しかし、idxmax()は最初に出現する最大値のインデックスを返します。

つまり、

index    0    1    2    3    4
value   100  200  300  300  150
                   ↑
                 ここ

となります。


最大値を持つすべての行を取得する

最大値が複数ある場合、それらをすべて取得したいことがあります。

その場合はmax()と条件式を組み合わせます。

max_value = s.max()

print(s[s == max_value])

結果:

2    300
3    300
dtype: int64

DataFrameの場合も同様です。

max_value = df["sales"].max()

print(df[df["sales"] == max_value])

これで最大値を持つすべての行を取得できます。


NaNが含まれる場合のidxmax()

Pandasでは、データにNaNが含まれることがあります。

import pandas as pd
import numpy as np

s = pd.Series([10, np.nan, 30, 20])

print(s.idxmax())

通常、NaNを除外して最大値を持つインデックスを取得します。

2

30が最大値なので、インデックス2が返されます。

ただし、データがすべてNaNの場合などは、期待する結果にならない可能性があります。

実際のデータ分析では、欠損値の状態も確認しておくことが重要です。


idxmax()とnumpy.argmax()の違い

Pythonで最大値の位置を調べる方法として、NumPyのargmax()もあります。

例えば、

import numpy as np

data = np.array([10, 30, 20, 50, 40])

print(np.argmax(data))

結果:

3

idxmax()と似ていますが、両者には違いがあります。

方法 主な対象 返すもの
idxmax() Pandas Series / DataFrame インデックス
np.argmax() NumPy配列 最大値の位置

特にPandasでは、文字列などのラベルをインデックスとして設定できます。

s = pd.Series(
    [10, 30, 20],
    index=["A", "B", "C"]
)

print(s.idxmax())

結果:

B

このように、Pandasのidxmax()はインデックスラベルをそのまま返せる点が便利です。


idxmax()の実践例

ここでは、実際のデータ分析でよくある使い方を紹介します。

売上が最大の日を調べる

import pandas as pd

sales = pd.Series(
    [120000, 180000, 250000, 210000, 300000],
    index=[
        "2026-09-01",
        "2026-09-02",
        "2026-09-03",
        "2026-09-04",
        "2026-09-05"
    ]
)

print(sales.idxmax())

結果:

2026-09-05

最大売上の日付を簡単に取得できます。


最大売上と商品名を取得する

import pandas as pd

df = pd.DataFrame({
    "product": ["A", "B", "C", "D"],
    "sales": [100000, 250000, 180000, 320000]
})

index = df["sales"].idxmax()

print("商品:", df.loc[index, "product"])
print("売上:", df.loc[index, "sales"])

結果:

商品: D
売上: 320000

idxmax()でよくある間違い

最大値が返ってくると思ってしまう

次のコードでは、

print(s.idxmax())

最大値ではなく、最大値のインデックスが返ります。

最大値が欲しいなら、

print(s.max())

を使います。


DataFrame全体に対して使う場合

df.idxmax()

では、基本的に列ごとの最大値のインデックスが返ります。

「DataFrame全体の最大値がどこにあるのか」を調べたい場合には、idxmax()だけでは目的を達成できません。

まず、対象となる列を指定するなど、データの構造に応じた処理が必要です。


idxmax()とidxmin()の違い

最大値ではなく、最小値を持つインデックスを取得したい場合はidxmin()を使います。

import pandas as pd

s = pd.Series([50, 20, 80, 10, 40])

print(s.idxmin())

結果:

3

最小値が10で、そのインデックスが3だからです。

メソッド 用途
idxmax() 最大値のインデックス
idxmin() 最小値のインデックス
max() 最大値
min() 最小値

Pythonのidxmaxまとめ

PythonのPandasで利用できるidxmax()は、最大値を持つ要素のインデックスを取得するための便利なメソッドです。

基本的な使い方は次のとおりです。

s.idxmax()

DataFrameでは、

df.idxmax()

とすることで、列ごとに最大値を持つ行のインデックスを取得できます。

また、

df.idxmax(axis=1)

とすれば、行ごとに最大値を持つ列を調べられます。

特に重要なのは、max()との違いです。

s.max()       # 最大値
s.idxmax()    # 最大値のインデックス

Pandasを使ったデータ分析では、「最大値そのもの」だけでなく「最大値を持つデータがどこにあるか」を調べるケースが多くあります。そのようなときにidxmax()を覚えておくと、コードをシンプルに書けます。

「最大値を取得するならmax()、最大値の場所を取得するならidxmax()」と覚えておくとよいでしょう。


pandas|集計・グループ化の関連記事

groupbyや各種集計関数で、データを要約する操作の記事です。

pandas全体の使い方は「pandasの使い方を初心者向けに解説」でまとめています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら