【Python】Pandas DataFrameの全行に関数を適用するapply()メソッドの使い方
このチュートリアルでは、PandasのDataFrameのすべての行に対して関数を適用できるapply()メソッドについて解説します。
apply()メソッドとは
apply()は、DataFrameの各行(または各列)に対して任意の関数を適用するためのメソッドです。例えば、各行の数値同士を乗算した結果を新しい列として追加したい場合などに非常に便利です。axis=1を指定することで行方向への適用が可能になります(axis=0の場合は列方向に適用されます)。ここでは、いくつかの実装方法を順番に見ていきましょう。
例1: 自作関数をラムダ式で適用する
まず、独自に定義した関数をlambda式経由で各行に適用する基本的な方法です。
# pandasパッケージをインポート
import pandas as pd
# 乗算を行う関数を定義
def multiply(x, y):
return x * y
# DataFrame用の辞書を作成
data = {
'Maths': [10, 34, 53],
'Programming': [23, 12, 43]
}
# データからDataFrameを作成
data_frame = pd.DataFrame(data)
# DataFrameを表示
print('--------------------Before------------------')
print(data_frame)
print()
# multiply関数を各行に適用
data_frame['Multiply'] = data_frame.apply(lambda row: multiply(row['Maths'], row['Programming']), axis=1)
# DataFrameを表示
print('--------------------After------------------')
print(data_frame)
出力結果
上記のプログラムを実行すると、以下のような結果が得られます。
--------------------Before------------------ Maths Programming 0 10 23 1 34 12 2 53 43 --------------------After------------------ Maths Programming Multiply 0 10 23 230 1 34 12 408 2 53 43 2279
各行の「Maths」と「Programming」の値が乗算され、「Multiply」という新しい列に結果が格納されていることがわかります。
例2: Pythonの組み込み関数を使用する
自作関数だけでなく、sumやpowなどのPython組み込み関数もそのまま渡すことができます。
# pandasパッケージをインポート
import pandas as pd
# DataFrame用の辞書を作成
data = {
'Maths': [10, 34, 53],
'Programming': [23, 12, 43]
}
# データからDataFrameを作成
data_frame = pd.DataFrame(data)
# DataFrameを表示
print('--------------------Before------------------')
print(data_frame)
print()
# 組み込みのsum関数を各行に適用
data_frame['Multiply'] = data_frame.apply(sum, axis=1)
# DataFrameを表示
print('--------------------After------------------')
print(data_frame)
出力結果
--------------------Before------------------ Maths Programming 0 10 23 1 34 12 2 53 43 --------------------After------------------ Maths Programming Multiply 0 10 23 33 1 34 12 46 2 53 43 96
この例では、各行の値の合計が計算され、新しい列に追加されています。
例3: NumPyの関数を使用する
NumPyモジュールが提供する関数も同じように利用できます。以下に例を示します。
# pandasパッケージをインポート
import pandas as pd
# 関数を使用するためにnumpyモジュールをインポート
import numpy as np
# DataFrame用の辞書を作成
data = {
'Maths': [10, 34, 53],
'Programming': [23, 12, 43]
}
# データからDataFrameを作成
data_frame = pd.DataFrame(data)
# DataFrameを表示
print('--------------------Before------------------')
print(data_frame)
print()
# numpyモジュールのsum関数を各行に適用
data_frame['Multiply'] = data_frame.apply(np.sum, axis=1)
# DataFrameを表示
print('--------------------After------------------')
print(data_frame)
出力結果
--------------------Before------------------ Maths Programming 0 10 23 1 34 12 2 53 43 --------------------After------------------ Maths Programming Multiply 0 10 23 33 1 34 12 46 2 53 43 96
NumPyのnp.sumを使っても、組み込みのsumと同じ結果が得られます。
補足: パフォーマンスに関する注意点
apply()は柔軟で便利なメソッドですが、大量のデータを扱う場合は処理速度が遅くなることがあります。単純な四則演算などであれば、ベクトル化された操作(例:data_frame['Maths'] * data_frame['Programming'])の方がはるかに高速です。用途に応じて使い分けることをおすすめします。
まとめ
このように、DataFrameのapply()メソッドを使えば、すべての行に対して関数を簡単に適用できます。自作関数・Python組み込み関数・NumPyの関数など、さまざまな関数を柔軟に活用できるのが魅力です。チュートリアルに関するご不明な点があれば、ぜひコメント欄でお知らせください。
-
Pandas DataFrameのすべての行に関数を適用する方法
Pandasでデータを加工する際、DataFrameのすべての行に対して同じ処理を一括で適用したいケースはよくあります。そんなときに便利なのが apply() メソッドです。axis=1 を指定することで、行方向に関数を適用できます。本記事では、ラムダ式とユーザー定義関数の2つの方法を具体的なコード例とともに解説します。 ラムダ関数を各行に適用する 最も手軽なのは、ラムダ式(無名関数)を apply() に渡す方法です。簡単な演算処理なら、わざわざ関数を定義せずに1行で書けます。 例 import pandas as pd df = pd.DataFrame([(10, 3, 13), (0
-
【Pandas】DataFrameの先頭に新しい行を追加する方法
PandasにおけるDataFrameは、データを行と列の表形式で保持する2次元のデータ構造です。リスト、辞書、Series、別のDataFrameなど、さまざまなデータから作成できます。しかし、すでに作成済みのDataFrameに行を追加する場合、通常の方法では新しい行は末尾に追加されます。本記事では、インデックスを活用したテクニックによって、DataFrameの先頭に新しい行を追加する方法を2つ紹介します。なお、かつてはDataFrame.append()メソッドが行の追加によく使われていましたが、pandas 1.4以降で非推奨となり、pandas 2.0で削除されました。現在はpd.c