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

【Python】PandasのDataFrameを分単位(7分間隔)でグループ化する方法

Pandasで時系列データを扱う際、DataFrameを一定の時間間隔(例:7分ごと)でグループ化したいケースはよくあります。これを実現するには、groupby()メソッドとpd.Grouper()関数を組み合わせます。Grouperのkey引数にグループ化の基準となる日時列を指定し、freq引数に間隔を設定するだけで、簡単に時間単位の集計が可能です。

本記事では、車の販売記録を例に、購入日時(Date_of_Purchase)を7分間隔でグループ化し、登録価格(Reg_Price)の合計を算出する方法を解説します。

サンプルDataFrameの作成

まず、「Car」「Date_of_Purchase」「Reg_Price」の3列からなるDataFrameを作成します。Date_of_Purchase列には、日付と時刻の両方を含むタイムスタンプを設定しています。

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-07-28 00:10:00"),
            pd.Timestamp("2021-07-28 00:12:00"),
            pd.Timestamp("2021-07-28 00:15:00"),
            pd.Timestamp("2021-07-28 00:16:00"),
            pd.Timestamp("2021-07-28 00:17:00"),
            pd.Timestamp("2021-07-28 00:20:00"),
            pd.Timestamp("2021-07-28 00:35:00"),
            pd.Timestamp("2021-07-28 00:42:00"),
            pd.Timestamp("2021-07-28 00:57:00"),
        ],

        "Reg_Price": [1000, 1400, 1100, 900, 1700,
                      1800, 1300, 1150, 1350]
    }
)

print("DataFrame...\n", dataFrame)

Grouperで7分間隔にグループ化する

次に、groupby()の中でpd.Grouper()を使用して、Date_of_Purchase列を指定します。freq='7min'と設定することで、7分間隔でデータがグループ化されます。

# GrouperでDate_of_Purchase列を7分間隔にグループ化
print("\nGroup Dataframe by 7 minutes...\n",
      dataFrame.groupby(pd.Grouper(key='Date_of_Purchase',
                                   axis=0, freq='7min')).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-07-28 00:10:00"),
            pd.Timestamp("2021-07-28 00:12:00"),
            pd.Timestamp("2021-07-28 00:15:00"),
            pd.Timestamp("2021-07-28 00:16:00"),
            pd.Timestamp("2021-07-28 00:17:00"),
            pd.Timestamp("2021-07-28 00:20:00"),
            pd.Timestamp("2021-07-28 00:35:00"),
            pd.Timestamp("2021-07-28 00:42:00"),
            pd.Timestamp("2021-07-28 00:57:00"),
        ],

        "Reg_Price": [1000, 1400, 1100, 900, 1700,
                      1800, 1300, 1150, 1350]
    }
)

print("DataFrame...\n", dataFrame)

# GrouperでDate_of_Purchase列を7分間隔にグループ化
print("\nGroup Dataframe by 7 minutes...\n",
      dataFrame.groupby(pd.Grouper(key='Date_of_Purchase',
                                   axis=0, freq='7min')).sum())

実行結果

上記のコードを実行すると、次のような出力が得られます。

DataFrame...
         Car   Date_of_Purchase   Reg_Price
0       Audi 2021-07-28 00:10:00         1000
1      Lexus 2021-07-28 00:12:00         1400
2      Tesla 2021-07-28 00:15:00         1100
3   Mercedes 2021-07-28 00:16:00          900
4       BMW 2021-07-28 00:17:00         1700
5     Toyota 2021-07-28 00:20:00         1800
6     Nissan 2021-07-28 00:35:00         1300
7    Bentley 2021-07-28 00:42:00         1150
8    Mustang 2021-07-28 00:57:00         1350

Group Dataframe by 7 minutes...
                     Reg_Price
Date_of_Purchase
2021-07-28 00:07:00     2400.0
2021-07-28 00:14:00     5500.0
2021-07-28 00:21:00        NaN
2021-07-28 00:28:00        NaN
2021-07-28 00:35:00     1300.0
2021-07-28 00:42:00     1150.0
2021-07-28 00:49:00        NaN
2021-07-28 00:56:00     1350.0

結果のポイント

  • 最初のビンは、先頭のタイムスタンプ(00:10:00)を7分区切りに切り下げた「00:07:00」から始まります。
  • 「00:21:00」「00:28:00」「00:49:00」のように該当データが存在しない区間はNaNになります。0で埋めたい場合は.fillna(0)などを活用しましょう。
  • sum()は数値列のみに適用されるため、文字列型の「Car」列は集計結果から除外されます。
  • freq引数には「'1min'」「'5min'」「'30min'」など、任意の時間間隔を柔軟に指定できます。
  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