pandasでのデータ加工に慣れてくると、
「列の値を少し変換したい」「条件によって値を変えたい」といった場面が増えてきます。
こうした処理でよく使われるのが、apply と lambda の組み合わせです。
この記事では、
- applyとは何か
- lambdaとは何か
- 実際にどう使うのか
を順を追って解説していきます。
pandasの導入記事はこちら。
Python入門:pandasの基本をやさしく解説(データ操作の超入門) – Lean Data Office
apply は、データの各要素に対して処理を行うための仕組みです。
例えば、「salesをすべて2倍にする」といった処理をしたい場合、
通常はループを書く必要があります。
しかしpandasでは、applyを使うことで
シンプルに書くことができます。
サンプルデータの準備
まずは例となるデータを用意します。
Python
import pandas as pd
data = {
“name”: [“A”, “B”, “C”],
“sales”: [100, 200, 300]
}
df = pd.DataFrame(data)
Show more lines
applyの基本的な使い方
まずは単純な例です。
Python
df[“sales_double”] = df[“sales”].apply(lambda x: x * 2)
print(df)
Show more lines
このコードは「salesを2倍にした列」を追加しています。
処理の流れを理解する
この1行は分解して考えると分かりやすくなります。
Python
df[“sales”].apply(lambda x: x * 2)
Show more lines
ここでは次の処理が行われています。
df["sales"]で sales列を取り出すapply()を使って各要素に処理を適用するlambda x: x * 2で「値を2倍にする」
つまり、
100 → 200
200 → 400
300 → 600
という変換を1つずつ行っています。
lambdaとは何か
lambda は、その場で簡単な関数を作る書き方です。
先ほどのコードは、普通の関数で書くと次のようになります。
Python
def double(x):
return x * 2
df[“sales”].apply(double)
Show more lines
これを短く書いたものが:
Python
lambda x: x * 2
Show more lines
です。
条件による値の変更
applyの強みは、「条件分岐」が書けることです。
例えば、売上によって分類する場合です。
Python
df[“rank”] = df[“sales”].apply(
lambda x: “high” if x >= 200 else “low”
)
Show more lines
この処理では、
- 200以上 → “high”
- それ以外 → “low”
という新しい列が作られます。
なぜapplyを使うのか
ここが重要なポイントです。
pandasにはすでに以下のような機能があります:
sum()mean()groupby()
しかし、これらでは対応できない
「細かい独自ルール」の処理が出てきます。
例:
- 特定条件で文字列を分ける
- 数値を複雑に変換する
- フォーマットを整える
こういう場合に apply が必要になります。
行単位で処理する(少し応用)
列だけでなく、行全体を対象にすることもできます。
Python
data = {
“name”: [“A”, “B”],
“sales”: [100, 300],
“country”: [“JP”, “US”]
}
df = pd.DataFrame(data)
df[“label”] = df.apply(
lambda row: row[“country”] + “_” + str(row[“sales”]),
axis=1
)
Show more lines
ここでは1行ずつ処理しています。
ポイントは axis=1 です。
axis=0→ 列方向(デフォルト)axis=1→ 行方向
この記事では、pandasの apply と lambda について解説しました。
- applyは「各要素に処理を適用する仕組み」
- lambdaは「簡単な関数をその場で作る書き方」
- 組み合わせることで柔軟なデータ加工ができる
最初は少し難しく感じるかもしれませんが、
やっていることはシンプルです。
「1つずつ値を取り出して、変換しているだけ」
この考え方が理解できれば、
かなり自由にデータ処理ができるようになります。