Python
 Computer >> コンピューター >  >> プログラミング >> Python

【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 と正しく集計されており、時系列データの月別集計が簡単に行えることがわかります。

  1. 【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を作

  2. 【Python・Pandas】データフレームの特定の列の合計値を取得する方法

    データ分析をしていると、データフレーム(DataFrame)の中から特定の列だけの合計値を求めたい場面によく出会います。そんなときに便利なのが、Pandasのsum関数です。 合計を計算したい列をsum関数に渡すだけで、その列の合計値を簡単に取得できます。さらに、axis引数を指定すれば、列方向・行方向のどちらで集計するかも自由に制御可能です。 それでは、具体的なコード例を見ていきましょう。 サンプルコード import pandas as pd my_data = { Name: pd.Series([Tom, Jane, Vin, Eve, Will]), Age: p