【Python Pandas】groupby()とapply()でローリング平均(移動平均)を求める方法
Pandasでローリング平均(移動平均)を求めるには、apply()関数を使用します。さらにgroupby()と組み合わせることで、カテゴリごとにローリング平均を計算することも可能です。
まずは、必要なライブラリをインポートしましょう。
import pandas as pd
DataFrameの作成
次に、2つのカラムを持つDataFrameを作成します。1つは車種名を表す文字列型の「Car」カラム、もう1つは登録価格を表す整数型の「Reg_Price」カラムです。
dataFrame = pd.DataFrame(
{
"Car": ['Tesla', 'Mercedes', 'Tesla', 'Mustang', 'Mercedes', 'Mustang'],
"Reg_Price": [5000, 1500, 6500, 8000, 9000, 6000]
}
)
groupby()とapply()でローリング平均を計算する
groupby()で「Car」列を基準にデータをグループ化し、apply()内でrolling().mean()を呼び出すことで、各グループごとのローリング平均を求められます。ここではウィンドウサイズを2に設定しています。
dataFrame.groupby("Car")["Reg_Price"].apply(
lambda x: x.rolling(center=False, window=2).mean()
)
完全なサンプルコード
以下が、ここまでの手順をまとめたコード例です。
import pandas as pd
# DataFrameを作成
dataFrame = pd.DataFrame(
{
"Car": ['Tesla', 'Mercedes', 'Tesla', 'Mustang', 'Mercedes', 'Mustang'],
"Reg_Price": [5000, 1500, 6500, 8000, 9000, 6000]
}
)
print("DataFrame...\n", dataFrame)
print("\nRolling Mean...\n",
dataFrame.groupby("Car")["Reg_Price"].apply(
lambda x: x.rolling(center=False, window=2).mean()
)
)
実行結果
上記のコードを実行すると、以下のような出力が得られます。
DataFrame ...
Car Reg_Price
0 Tesla 5000
1 Mercedes 1500
2 Tesla 6500
3 Mustang 8000
4 Mercedes 9000
5 Mustang 6000
Rolling Mean...
0 NaN
1 NaN
2 5750.0
3 NaN
4 5250.0
5 7000.0
Name: Reg_Price, dtype: float64
出力結果の解説
ウィンドウサイズが2に設定されているため、各グループの最初の行は平均を計算するためのデータが不足しており、NaNが表示されます。
- Teslaグループ:(5000 + 6500) ÷ 2 = 5750.0
- Mercedesグループ:(1500 + 9000) ÷ 2 = 5250.0
- Mustangグループ:(8000 + 6000) ÷ 2 = 7000.0
このように、groupby()とapply()を組み合わせれば、カテゴリ別の時系列データに対して柔軟にローリング平均を計算できます。売上データやセンサーデータなど、グループ単位での移動平均分析にぜひ活用してみてください。
-
Python Pandas入門:TimedeltaIndex.componentsでタイムデルタの構成要素をDataFrameとして取得する方法
TimedeltaIndexの各要素を「日・時・分・秒・ミリ秒・マイクロ秒・ナノ秒」といった構成要素(コンポーネント)に分解し、その結果をDataFrameとして取得したい場合は、TimedeltaIndex.componentsプロパティを使用します。 この記事では、実際のコード例とともに、componentsプロパティの使い方と出力結果をわかりやすく解説します。 必要なライブラリのインポート まず、pandasをインポートします。 import pandas as pd TimedeltaIndexオブジェクトの作成 次に、TimedeltaIndexオブジェクトを作成します。dataパラ
-
PythonでpandasのDataFrameをCSVファイルに書き込む方法【to_csv()の使い方】
pandasのDataFrameをCSVファイルに出力する基本 PythonでpandasのDataFrameをCSVファイルに書き込むには、to_csv()メソッドを使用します。このメソッドは、DataFrameの内容をそのままCSV形式で保存できる、最もシンプルで一般的な方法です。 まずはサンプルデータとして、リストを値にもつ辞書を作成しましょう。 # リストの辞書を定義 d = {Car: [BMW, Lexus, Audi, Mercedes, Jaguar, Bentley], Date_of_purchase: [2020-10-10, 2020-10-12, 2020-