Pandas Data Offsets:CustomBusinessHour.rule_code徹底解説

2024-04-02

Pandas Data Offsets と CustomBusinessHour.rule_code の解説

CustomBusinessHour は、Data Offsets の一種で、営業時間 に基づいて日付をオフセットします。つまり、土日や祝日などを除いて、ビジネス日のみオフセットを進めることができます。

CustomBusinessHour.rule_code は、このオフセットの規則を表す文字列です。以下の情報が含まれます。

  • 開始時間: 営業日の開始時間 (例: "09:00")
  • 終了時間: 営業日の終了時間 (例: "17:00")
  • 週マスク: 曜日ごとに営業日かどうかを表すビットマスク (例: "MoTuWeThFr")
  • 祝日: 営業日として除外される祝日のリスト

例:

from pandas.tseries.offsets import CustomBusinessHour

# 営業時間が 9:00 から 17:00 までの平日
offset = CustomBusinessHour(start="09:00", end="17:00")

# 2024-03-26 に 2 営業日オフセットを加算
date = pd.to_datetime("2024-03-26") + offset

# 結果: 2024-03-28
print(date)

CustomBusinessHour.rule_code の値は、以下の形式で生成されます。

"C<start>-<end><weekmask>"

例:

# 上記の例の場合
offset.rule_code
# 出力: 'C09:00-17:00MoTuWeThFr'


Pandas CustomBusinessHour サンプルコード

営業日のみオフセットを加算

from pandas.tseries.offsets import CustomBusinessHour

# 営業時間が 9:00 から 17:00 までの平日
offset = CustomBusinessHour(start="09:00", end="17:00")

# 2024-03-26 に 2 営業日オフセットを加算
date = pd.to_datetime("2024-03-26") + offset * 2

# 結果: 2024-03-30
print(date)

祝日を除外

from pandas.tseries.offsets import CustomBusinessHour

# 祝日
holidays = ["2024-03-28", "2024-03-29"]

# 営業時間が 9:00 から 17:00 までの平日、祝日を除外
offset = CustomBusinessHour(start="09:00", end="17:00", holidays=holidays)

# 2024-03-26 に 2 営業日オフセットを加算
date = pd.to_datetime("2024-03-26") + offset * 2

# 結果: 2024-04-02
print(date)

週マスクで特定の曜日を除外

from pandas.tseries.offsets import CustomBusinessHour

# 営業時間が 9:00 から 17:00 までの月・水・金曜日
offset = CustomBusinessHour(start="09:00", end="17:00", weekmask="MoWeFr")

# 2024-03-26 に 2 営業日オフセットを加算
date = pd.to_datetime("2024-03-26") + offset * 2

# 結果: 2024-04-05
print(date)

複雑な営業時間帯

from pandas.tseries.offsets import CustomBusinessHour

# 午前 9:00 から 12:00、午後 13:00 から 17:00 までの平日
offset = CustomBusinessHour(start=["09:00", "13:00"], end=["12:00", "17:00"])

# 2024-03-26 に 1 営業日オフセットを加算
date = pd.to_datetime("2024-03-26") + offset

# 結果: 2024-03-27
print(date)

営業日数をカウント

from pandas.tseries.offsets import CustomBusinessHour

# 営業時間が 9:00 から 17:00 までの平日
offset = CustomBusinessHour(start="09:00", end="17:00")

# 2024-03-26 から 2024-04-05 までの営業日数
business_days = CustomBusinessHour.apply_index(
    pd.date_range("2024-03-26", "2024-04-05")
)

# 結果: 7
print(business_days.sum())

これらのサンプルコードは、CustomBusinessHour の基本的な使い方を理解するのに役立ちます。より複雑なユースケースについては、公式ドキュメント: https://pandas.pydata.org/docs/reference/api/pandas.tseries.offsets.CustomBusinessHour.html を参照してください。



Pandas で営業日オフセットを設定する他の方法

from pandas import DateOffset

# 営業日オフセット
business_day_offset = DateOffset(days=1)

# 2024-03-26 から 5 営業日先のリスト
business_days = []
date = pd.to_datetime("2024-03-26")
for _ in range(5):
    while not is_business_day(date):
        date += business_day_offset
    business_days.append(date)
    date += business_day_offset

# 結果: ['2024-03-26', '2024-03-27', '2024-03-28', '2024-04-02', '2024-04-03']
print(business_days)

# 祝日判定関数
def is_business_day(date):
    # 祝日リスト
    holidays = ["2024-03-28", "2024-03-29"]
    return date.weekday() < 5 and date not in holidays

pandas.to_datetime() と holidays パラメータ

from pandas import to_datetime

# 営業日オフセット
business_day_offset = "B"

# 2024-03-26 から 5 営業日先のリスト
business_days = to_datetime(pd.date_range("2024-03-26", periods=5, freq=business_day_offset, holidays=["2024-03-28", "2024-03-29"]))

# 結果: ['2024-03-26', '2024-03-27', '2024-03-28', '2024-04-02', '2024-04-03']
print(business_days)

これらの方法は、CustomBusinessHour よりも柔軟性がありますが、コード量が増えたり、外部ライブラリのインストールが必要になったりする場合があります。

注意事項

  • これらの方法は、あくまで参考例です。実際のユースケースに合わせて、コードを修正する必要があります。
  • 祝日や営業時間帯は、地域や企業によって異なる場合があります。コードを使用する前に、正確な情報を確認してください。



Pandas Data Offsets と DateOffset.rule_code の完全ガイド

DateOffset. rule_code 属性は、以下の情報をエンコードします。オフセットの種類: 例えば、'D' は日単位オフセット、'M' は月単位オフセットを表します。オフセットの大きさ: 例えば、'2D' は 2 日後のオフセット、'3M' は 3 ヶ月後のオフセットを表します。



Pandas で月末から1週間前の日付を取得する方法

例えば、今日から1週間後の日付を取得するには、以下のコードを使用できます。このコードは、今日の日付に DateOffset オブジェクトを加算することで、1週間後の日付を取得しています。LastWeekOfMonth は、月末から指定された間隔だけ前の日付を取得する DateOffset オブジェクトです。


【応用例】Pandasでスケジュール設定:WeekOfMonthオフセットで毎月の第2週に実行するタスクをスケジュール

pandas. tseries. offsets. WeekOfMonth は、月の第 x 週の y 日目 を指定するオフセットです。freqstr 属性はこのオフセットの文字列表現を取得するために使用されます。構文説明weekday (オプション): 週の何番目の曜日を取得するかを指定します。デフォルトは 1 (月曜日) です。


Pandasで月末から2週間後の最初の月曜日を判定:SemiMonthBegin.onOffset徹底解説

pandas. tseries. offsets. SemiMonthBegin は、pandasライブラリで提供される日付オフセットの一つです。これは、月末から2週間後に発生する最初の月曜日を基準とするオフセットです。SemiMonthBegin


Pandas Data offsetsとCustomBusinessMonthBeginの威力

CustomBusinessMonthBegin. is_year_startは、その月が年の初めかどうかを判定する属性です。つまり、1月の月初めの営業日であればTrue、それ以外の月であればFalseを返します。CustomBusinessMonthBegin



pandas Data offsets: CustomBusinessDay.is_year_startの使い方

概要:CustomBusinessDay は、祝日などを除いた営業日ベースの日付オフセットを表すクラスです。is_year_start は、CustomBusinessDay オブジェクトを受け取り、その日付が その年の最初の営業日 かどうかを判定します。 *判定は、以下の条件に基づいて行われます。 日付がその年の1月1日であること 日付がその年の最初の営業日であること


Pandas.tseries.offsets.Tick: 高精度な時間間隔を操る魔法の杖

pandas. tseries. offsets. Tick は、PandasライブラリにおけるDateOffsetサブクラスの一つで、高精度な時間間隔を表現するためのオフセットを提供します。従来のDateOffsetよりも細かい時間単位での操作が可能となり、金融市場データや高頻度データ分析において特に有用です。


Pandas Series の append() メソッド:サンプルコード

append() メソッドは、以下の引数を受け取ります。to_append: 結合する Seriesignore_index: True の場合、結合後の Series のインデックスは元の Series のインデックスを無視します。デフォルトは False です。


Pandas:CustomBusinessMonthEnd.applyを用いた月末営業日の計算方法と祝日・曜日マスクの考慮

pandas. tseries. offsets. CustomBusinessMonthEnd. apply は、Pandas の DateOffset オブジェクト CustomBusinessMonthEnd を使用して、指定された日付にオフセットを適用し、新しい日付を生成する関数です。この関数は、月末の営業日を基準に、指定された月数分のオフセットを行うことができます。


Pandas Seriesの is_monotonic_decreasing メソッド:グループ内の値が単調減少しているかどうかを判定する

pandas. core. groupby. SeriesGroupBy. is_monotonic_decreasing メソッドは、グループ化された Series 内の各グループが単調減少しているかどうかを判断します。つまり、グループ内のすべての値が前の値よりも小さくなっているかどうかを確認します。