【Python】PandasのDataFrameから最年少の従業員IDと給与を抽出する方法
はじめに
PandasのDataFrameを扱う際、「最も年齢が若い従業員のIDと給与を知りたい」というケースはよくあります。本記事では、条件抽出の基本であるブールインデックス参照を使って、この問題をシンプルかつ効率的に解決する方法を、サンプルコードと実行結果付きで解説します。
入力データ
以下のような従業員情報を持つDataFrameを想定します。
Id Age Salary 0 1 27 40000 1 2 22 25000 2 3 25 40000 3 4 23 35000 4 5 24 30000 5 6 32 30000 6 7 30 50000 7 8 28 20000 8 9 29 32000 9 10 27 23000
期待される出力
年齢が最小の従業員(22歳)に該当するIdとSalaryは以下の通りです。
Id Salary 1 2 25000
解決のアプローチ
この問題は、次の手順で解決できます。
- DataFrameを定義する
- Age列が最小値と一致する行を抽出する:比較条件を用いて、結果を別のDataFrameに格納します。
- 必要な列だけを取り出す:結果から「Id」と「Salary」列のみを選択して表示します。
手順1:最小年齢に一致する行を抽出
df['Age'].min()でAge列の最小値を取得し、それと一致する行だけをフィルタリングします。
result = df[df['Age'] == df['Age'].min()]
手順2:IdとSalary列を取り出す
抽出した結果から、表示したい列だけを二重括弧で指定します。
result[['Id', 'Salary']]
完全な実装例
ここまでの手順をまとめたコード全体は以下のようになります。
import pandas as pd
data = [[1,27,40000],[2,22,25000],[3,25,40000],[4,23,35000],[5,24,30000],
[6,32,30000],[7,30,50000],[8,28,20000],[9,29,32000],[10,27,23000]]
df = pd.DataFrame(data, columns=('Id','Age','Salary'))
print("DataFrame is\n", df)
print("find the minimum age of an employee id and salary\n")
result = df[df['Age'] == df['Age'].min()]
print(result[['Id','Salary']])実行結果
DataFrame is Id Age Salary 0 1 27 40000 1 2 22 25000 2 3 25 40000 3 4 23 35000 4 5 24 30000 5 6 32 30000 6 7 30 50000 7 8 28 20000 8 9 29 32000 9 10 27 23000 find the minimum age of an employee id and salary Id Salary 1 2 25000
まとめ
df[df['列名'] == df['列名'].min()]というパターンは、最小値に一致する行を抽出する際の定番テクニックです。同じ考え方でmax()に置き換えれば最大値の行も抽出できます。また、idxmin()やnsmallest()といったメソッドでも同様の結果が得られるため、目的や可読性に応じて使い分けるとよいでしょう。
-
Pythonでpandas Series内のNaN値のインデックスを見つける方法
はじめにpandasのSeriesデータを扱っていると、欠損値(NaN)がどこにあるのかを確認したい場面はよくあります。この記事では、Pythonを使ってSeries内のNaN値が含まれるインデックス位置を特定する方法を解説します。入力データの例以下のようなSeriesがあると仮定します。0 1.0 1 2.0 2 3.0 3 NaN 4 4.0 5 NaN期待される出力このSeriesに対してNaN値のインデックスを求めると、次の結果が得られます。index is 3 index is 5解決手順この問題を解くためには、以下の手順に従います。pandasの
-
Pythonで行列の転置を求めるプログラムの作成方法
行列の転置とはn × n の行列 M が与えられたとき、その転置行列(transpose)を求めることを考えます。転置行列とは、行と列のインデックスを入れ替えた行列のことで、形式的には、すべての行番号 r と列番号 c に対して次の関係が成り立ちます。matrix[r][c] = matrix[c][r]つまり、元の行列の r 行 c 列にある要素は、転置後の行列では c 行 r 列へと移動します。入力例726372537出力例(転置行列)735273627解法のアプローチこの問題は、以下の手順に従って解くことができます。結果を格納するための新しいリスト M を用意します。カウンター trac