Pandasで四半期分析を簡単に行う:Timestamp.quarter属性の使い方と応用例


pandas.Timestamp.quarter は、Pandas データフレーム内の Timestamp 型データから四半期番号を取得するための属性です。

使い方

pandas.Timestamp.quarter 属性は、Timestamp 型データに直接アクセスすることで使用できます。

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2023-01-01', '2023-04-01', '2023-07-01', '2023-10-01'])
df = pd.DataFrame({'date': dates})

# 四半期番号の取得
df['quarter'] = df['date'].dt.quarter
print(df)

上記のコードを実行すると、以下の出力が得られます。

    date        quarter
0   2023-01-01        1
1   2023-04-01        2
2   2023-07-01        3
3   2023-10-01        4
  • 四半期ごとの在庫管理
  • 四半期ごとの顧客数推移
  • 四半期ごとの売上分析
  • 四半期情報の可視化には、折れ線グラフや棒グラフなどが有効です。
  • pandas.Timestamp.quarter 属性は、Timestamp 型データが格納された列に対してのみ使用できます。
  • pandas.Timestamp.quarter 属性は、1 から 4 までの値を返します。1 が第一四半期、2 が第二四半期、3 が第三四半期、4 が第四四半期となります。


四半期ごとの売上分析

この例では、Sales 列に売上データ、Date 列に日付データを含むデータフレームを作成し、四半期ごとの売上合計を算出します。

import pandas as pd

# サンプルデータの作成
data = {'Sales': [100, 150, 200, 250, 300],
        'Date': pd.to_datetime(['2023-01-01', '2023-02-01', '2023-03-01', '2023-04-01', '2023-05-01'])}
df = pd.DataFrame(data)

# 四半期ごとの売上合計の算出
df['quarter'] = df['Date'].dt.quarter
df_grouped = df.groupby('quarter')['Sales'].sum()
print(df_grouped)
quarter
1    350
2    350
Name: Sales, dtype: int64

四半期ごとの顧客数推移

この例では、Customer ID 列に顧客IDデータ、Join Date 列に加入日データを含むデータフレームを作成し、四半期ごとの新規顧客数を算出します。

import pandas as pd

# サンプルデータの作成
data = {'Customer ID': [1, 2, 3, 4, 5],
        'Join Date': pd.to_datetime(['2023-02-15', '2023-05-12', '2023-08-01', '2023-11-07', '2024-02-03'])}
df = pd.DataFrame(data)

# 四半期ごとの新規顧客数の算出
df['quarter'] = df['Join Date'].dt.quarter
df_grouped = df.groupby('quarter')['Customer ID'].count()
print(df_grouped)
quarter
1    1
2    2
3    1
4    1
Name: Customer ID, dtype: int64

四半期ごとの在庫管理

この例では、Product ID 列に商品IDデータ、Stock Quantity 列に在庫数データ、Date 列に日付データを含むデータフレームを作成し、四半期ごとの在庫残高の推移を分析します。

import pandas as pd

# サンプルデータの作成
data = {'Product ID': ['A1', 'A2', 'A3', 'B1', 'B2'],
        'Stock Quantity': [100, 50, 20, 75, 30],
        'Date': pd.to_datetime(['2023-01-31', '2023-03-31', '2023-06-30', '2023-09-30', '2023-12-31'])}
df = pd.DataFrame(data)

# 四半期ごとの在庫残高の算出
df['quarter'] = df['Date'].dt.quarter
df_grouped = df.groupby(['Product ID', 'quarter'])['Stock Quantity'].sum()
print(df_grouped)
Product ID  quarter
A1          1     100
            2     50
            3     20
            4     10
A2          1     50
            2     50
            3     30
            4     30
A3          1     20
            2     20
            3     10
            4     10
B1          1     75
            2     75
            3     50
            4     25
B2          1     30
            2     30
            3     30
            4     30
Name: Stock Quantity, dtype: int64
  • 四半期
  • 四半期ごとの広告キャンペーンの効果測定


pandas.Timestamp.quarter 属性は、Timestamp 型データから四半期番号を取得する便利な機能です。しかし、状況によってはより柔軟性のある方法が必要となる場合があります。ここでは、pandas.Timestamp.quarter の代替方法として以下の3つの方法を紹介します。

dt.is_quarter_start 属性と dt.strftime メソッドの組み合わせ

この方法は、dt.is_quarter_start 属性で四半期の開始日かどうかを判定し、dt.strftime メソッドで四半期番号を文字列として取得します。

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2023-01-01', '2023-04-01', '2023-07-01', '2023-10-01'])
df = pd.DataFrame({'date': dates})

# 四半期番号の取得
df['quarter'] = df['date'].dt.is_quarter_start.astype(int) * (df['date'].dt.strftime('%q'))
print(df)
    date        quarter
0   2023-01-01        1
1   2023-04-01        2
2   2023-07-01        3
3   2023-10-01        4

lambda 関数

この方法は、lambda 関数を使用して四半期番号を算出します。

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2023-01-01', '2023-04-01', '2023-07-01', '2023-10-01'])
df = pd.DataFrame({'date': dates})

# 四半期番号の取得
df['quarter'] = df['date'].apply(lambda x: (x.month - 1) // 3 + 1)
print(df)
    date        quarter
0   2023-01-01        1
1   2023-04-01        2
2   2023-07-01        3
3   2023-10-01        4

NumPy 配列

この方法は、NumPy 配列を使用して四半期番号をマッピングします。

import pandas as pd
import numpy as np

# サンプルデータの作成
dates = pd.to_datetime(['2023-01-01', '2023-04-01', '2023-07-01', '2023-10-01'])
df = pd.DataFrame({'date': dates})

# 四半期番号のマップ
quarter_map = {1: 1, 2: 1, 3: 2, 4: 2, 5: 3, 6: 3, 7: 3, 8: 4, 9: 4, 10: 4, 11: 4, 12: 4}

# 四半期番号の取得
df['quarter'] = np.vectorize(quarter_map.get)(df['date'].dt.month)
print(df)
    date        quarter
0   2023-01-01        1
1   2023-04-01        2
2   2023-07-01        3
3   2023-10-01        4
方法利点欠点
dt.is_quarter_start 属性と dt.strftime メソッドわかりやすい複雑なフォーマット指定が必要
lambda 関数柔軟性が高い可読性がやや低い
NumPy 配列高速処理が可能事前準備が必要