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

Python・PandasでDataFrameを日数間隔でグループ化する方法を解説

PandasのDataFrameを日付単位でグループ化するには、groupby()メソッドとpd.Grouper()を組み合わせて使用します。Grouperのkey引数でグループ化の基準となる日付列を指定し、freq引数で間隔(頻度)を設定します。

本記事では、車両販売記録のデータを例に、7日間隔でデータをグループ化し、登録価格(Reg_Price)の合計を算出する方法を紹介します。

freq引数による日数間隔の指定方法

Grouperメソッドのfreqには、日数間隔を表す文字列を指定します。たとえば'7D'と設定すると、日付列の最初の日付から最後の日付まで、7日ごとの区切りでデータがグループ化されます。同様に、'1D'なら毎日、'30D'なら30日ごとの集計が可能です。

サンプルデータの作成

まず、「Car(車名)」「Date_of_Purchase(購入日)」「Reg_Price(登録価格)」の3つの列を持つDataFrameを作成します。

import pandas as pd

# Date_of_Purchase列を含むデータフレーム
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]
    }
)

Grouperを使った7日間隔でのグループ化

次に、groupby()関数の中でGrouperを使用し、Date_of_Purchase列を基準にグループ化します。freq='7D'を指定することで、7日間隔の集計が行われます。

print("\n7日間隔でグループ化した結果...\n",
      dataFrame.groupby(pd.Grouper(key='Date_of_Purchase', axis=0, freq='7D')).sum())

完全なコード例

以下に、ここまでの処理をまとめた完全なコードを示します。

import pandas as pd

# Date_of_Purchase列を含むデータフレーム
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列をgroupby内で選択
print("\n7日間隔でグループ化した結果...\n",
      dataFrame.groupby(pd.Grouper(key='Date_of_Purchase', axis=0, freq='7D')).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

7日間隔でグループ化した結果...
                     Reg_Price
Date_of_Purchase
2021-01-04             2450.0
2021-01-11                NaN
2021-01-18             1800.0
2021-01-25                NaN
2021-02-01                NaN
2021-02-08                NaN
2021-02-15                NaN
2021-02-22                NaN
2021-03-01                NaN
2021-03-08                NaN
2021-03-15             1700.0
2021-03-22                NaN
2021-03-29                NaN
2021-04-05                NaN
2021-04-12                NaN
2021-04-19                NaN
2021-04-26                NaN
2021-05-03             1350.0
2021-05-10                NaN
2021-05-17                NaN
2021-05-24                NaN
2021-05-31                NaN
2021-06-07             1000.0
2021-06-14                NaN
2021-06-21             1100.0
2021-06-28              900.0
2021-07-05             1400.0

結果のポイント

出力を見ると、7日ごとの区切り(ビン)ごとにReg_Priceの合計値が表示されています。該当する期間にデータが存在しない場合はNaNが表示されます。たとえば「2021-01-04」の週には1月4日のBentley(1150)と1月6日のNissan(1300)が含まれ、合計2450となっています。

なお、NaNを除外したい場合は、.sum()の後に.dropna()をチェーンすると、データが存在する期間のみを抽出できます。また、月単位や週単位で集計したい場合は、freq'M''W'に変更するだけで対応可能です。

  1. 【Python】Pandas DataFrameからサブセット(列の一部)を選択する方法

    Pandas DataFrameのサブセット選択とは? Pandasでは、DataFrameから必要な列や行だけを取り出す操作を「サブセットの選択」と呼びます。大きなデータセットから目的のデータだけを抽出できれば、分析や前処理の効率が大幅に向上します。 この記事では、CSVファイルを読み込んだDataFrameから、1つの列、および複数の列を選択する基本的な方法を解説します。 使用するCSVファイルの内容 今回使用する「SalesData.csv」は、Microsoft Excelで開くと以下のような内容になっています。 CSVファイルからDataFrameを作成する まず、pd.rea

  2. PythonでPandas DataFrameを棒グラフとして可視化する方法

    データ分析において、PandasのDataFrameを視覚的に表現することは非常に重要です。この記事では、CSVファイルから読み込んだデータをmatplotlibを使って棒グラフ(バーチャート)として表示する方法を解説します。 前提条件:サンプルデータ 今回は以下のような内容のCSVファイル(SalesData.csv)を使用します。 Car Reg_Price 0 BMW 2000 1 Lexus 1500 2 Audi 1500 3 Jaguar 2000 4 Mustang