【Python】Pandas DataFrameを月ごとにグループ化して列の合計値を計算する方法
本記事では、車の販売記録(Car Sale Records)を例に、Pandas DataFrameを月ごとにグループ化し、登録価格(Reg_Price)の合計を算出する方法を解説します。合計の計算には sum() メソッドを使用します。
サンプルデータの準備
まず、「Car(車名)」「Date_of_Purchase(購入日)」「Reg_Price(登録価格)」の3つの列を持つDataFrameを作成しましょう。
dataFrame = pd.DataFrame(
{
"Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW", "Toyota", "Nissan", "Bentley", "Mustang"],
"Date_of_Purchase": [
pd.Timestamp("2021-06-10"),
pd.Timestamp("2021-07-11"),
pd.Timestamp("2021-06-25"),
pd.Timestamp("2021-06-29"),
pd.Timestamp("2021-03-20"),
pd.Timestamp("2021-01-22"),
pd.Timestamp("2021-01-06"),
pd.Timestamp("2021-01-04"),
pd.Timestamp("2021-05-09")
],
"Reg_Price": [1000, 1400, 1100, 900, 1700, 1800, 1300, 1150, 1350]
}
)
月ごとのグループ化と合計の計算
groupby() 関数の中で pd.Grouper() を使い、Date_of_Purchase 列を指定します。頻度を表す freq パラメータに 'M' を設定することで月単位のグループ化が可能になり、sum() 関数によって各月の合計を計算できます。
print("\nGroup Dataframe by month...\n",
dataFrame.groupby(pd.Grouper(key='Date_of_Purchase', axis=0, freq='M')).sum())
完全なコード例
以下が全体のコードです。
import pandas as pd
# Date_of_Purchase 列を含むDataFrameを作成
dataFrame = pd.DataFrame(
{
"Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW", "Toyota", "Nissan", "Bentley", "Mustang"],
"Date_of_Purchase": [
pd.Timestamp("2021-06-10"),
pd.Timestamp("2021-07-11"),
pd.Timestamp("2021-06-25"),
pd.Timestamp("2021-06-29"),
pd.Timestamp("2021-03-20"),
pd.Timestamp("2021-01-22"),
pd.Timestamp("2021-01-06"),
pd.Timestamp("2021-01-04"),
pd.Timestamp("2021-05-09")
],
"Reg_Price": [1000, 1400, 1100, 900, 1700, 1800, 1300, 1150, 1350]
}
)
print("DataFrame...\n", dataFrame)
# GrouperでDate_of_Purchase列を指定し、月ごとにグループ化して合計を計算
print("\nGroup Dataframe by month...\n",
dataFrame.groupby(pd.Grouper(key='Date_of_Purchase', axis=0, freq='M')).sum())
実行結果
上記のコードを実行すると、次のような出力が得られます。
DataFrame...
Car Date_of_Purchase Reg_Price
0 Audi 2021-06-10 1000
1 Lexus 2021-07-11 1400
2 Tesla 2021-06-25 1100
3 Mercedes 2021-06-29 900
4 BMW 2021-03-20 1700
5 Toyota 2021-01-22 1800
6 Nissan 2021-01-06 1300
7 Bentley 2021-01-04 1150
8 Mustang 2021-05-09 1350
Group Dataframe by month...
Reg_Price
Date_of_Purchase
2021-01-31 4250.0
2021-02-28 NaN
2021-03-31 1700.0
2021-04-30 NaN
2021-05-31 1350.0
2021-06-30 3000.0
2021-07-31 1400.0
結果のポイント
月ごとのグループ化では、その月の末日がインデックスとして表示されます。データが存在しない月(2021年2月・4月など)は NaN となります。例えば2021年1月は 1300 + 1800 + 1150 = 4250 と正しく集計されており、時系列データの月別集計が簡単に行えることがわかります。
-
【Python】PandasでDataFrameを月ごとにグループ化して集計する方法
Pandasではgroupby()メソッドとpd.Grouper()を組み合わせることで、日付データを持つDataFrameを簡単に月ごとにグループ化できます。本記事では、車の販売記録を例に、月単位でデータをまとめ、登録価格(Reg_Price)の合計を算出する方法を解説します。 サンプルとなるDataFrameを作成する まずは、「Car(車名)」「Date_of_Purchase(購入日)」「Reg_Price(登録価格)」の3つの列を持つDataFrameを用意します。 import pandas as pd # Date_of_Purchase(購入日)列を含むDataFrameを作
-
【Python・Pandas】データフレームの特定の列の合計値を取得する方法
データ分析をしていると、データフレーム(DataFrame)の中から特定の列だけの合計値を求めたい場面によく出会います。そんなときに便利なのが、Pandasのsum関数です。 合計を計算したい列をsum関数に渡すだけで、その列の合計値を簡単に取得できます。さらに、axis引数を指定すれば、列方向・行方向のどちらで集計するかも自由に制御可能です。 それでは、具体的なコード例を見ていきましょう。 サンプルコード import pandas as pd my_data = { Name: pd.Series([Tom, Jane, Vin, Eve, Will]), Age: p