Pandasで最大値・最小値を抽出する方法はいくつかあります。
ここでは 基本的な使い方 → 列単位の処理 → 行単位の処理 → 条件付きの応用 の順に詳しく解説します。
目次
基本のメソッド
Pandasには max()
と min()
というメソッドがあり、SeriesやDataFrameに対して簡単に利用できます。
Series(1次元データ)の場合
import pandas as pd
s = pd.Series([3, 7, 1, 9, 4])
print(s.max()) # 最大値 → 9
print(s.min()) # 最小値 → 1
DataFrame(2次元データ)の場合
df = pd.DataFrame({
"A": [3, 7, 1, 9],
"B": [8, 2, 5, 4]
})
print(df.max()) # 各列の最大値
# A 9
# B 8
print(df.min()) # 各列の最小値
# A 1
# B 2
行・列を指定する方法
axis
引数で「行ごと」か「列ごと」かを指定できます。
axis=0
(デフォルト) → 列ごとに計算axis=1
→ 行ごとに計算
print(df.max(axis=0)) # 列ごとの最大値
print(df.max(axis=1)) # 行ごとの最大値
最大値・最小値の位置を知りたい場合
idxmax()
: 最大値のインデックスを返すidxmin()
: 最小値のインデックスを返す
print(s.idxmax()) # 3 (値9の位置)
print(s.idxmin()) # 2 (値1の位置)
DataFrameの場合
print(df.idxmax()) # 各列の最大値の行インデックス
print(df.idxmin()) # 各列の最小値の行インデックス
最大値・最小値の行そのものを取り出す
loc
を組み合わせると、その行全体を取得できます。
max_row = df.loc[df['A'].idxmax()]
min_row = df.loc[df['A'].idxmin()]
print(max_row)
print(min_row)
複数の最大・最小値を抽出(ソート応用)
もし「上位n件」や「下位n件」を抽出したいなら nlargest()
/ nsmallest()
が便利です。
print(df['A'].nlargest(2)) # A列の大きい順 上位2件
print(df['B'].nsmallest(3)) # B列の小さい順 下位3件
条件付きで最大値・最小値を抽出
例えば「B列が5以上のときのA列の最大値」など、条件を絞ることも可能です。
print(df.loc[df['B'] >= 5, 'A'].max())
まとめ
- 基本:
max()
/min()
- インデックス取得:
idxmax()
/idxmin()
- 行全体の抽出:
loc
と組み合わせる - 上位/下位n件:
nlargest()
/nsmallest()
- 条件付き抽出:
loc
と組み合わせて柔軟に指定
以上、Pandasで最大値・最小値を抽出する方法についてでした。
最後までお読みいただき、ありがとうございました。