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

Python Pandas CustomBusinessHour – 日付がオフセット上にない場合のみ、次のオフセットへロールフォワードする方法

指定した日付がオフセット上にない場合にのみ、その日付を次のオフセットへロールフォワードしたいときは、Pandas の CustomBusinessHour.rollforward() メソッドを使用します。すでに日付がオフセット上にある場合は、元の日付がそのまま返されます。

1. 必要なライブラリのインポート

まず、必要なライブラリをインポートします。

import pandas as pd

2. タイムスタンプオブジェクトの作成

Pandas でタイムスタンプオブジェクトを設定します。

timestamp = pd.Timestamp('2021-12-20 08:35:10')

3. CustomBusinessHour オフセットの作成

CustomBusinessHour オフセットを作成します。CustomBusinessHourDateOffset のサブクラスで、weekmask 引数を使って有効な営業日を柔軟に指定できます。ここでは「月・火・水・金」を営業日として設定しています(木曜日は除外)。

cbhOffset = pd.tseries.offsets.CustomBusinessHour(n = 5, weekmask = 'Mon Tue Wed Fri')

4. オフセットを加算してタイムスタンプを更新

タイムスタンプにオフセットを加算し、更新後のタイムスタンプを表示します。

print("\nUpdated Timestamp...\n",timestamp + cbhOffset)

5. ロールフォワードの実行

日付がオフセット上にない場合に、rollforward() を使って次のオフセットへ進めます。

roll = cbhOffset.rollforward(pd.Timestamp('2021-12-30 08:35:10'))

結果を表示します。

print("\nRoll forward Result...\n",roll)

完全なコード例

以下は、ここまでの手順をまとめたコード全体です。

import pandas as pd

# Pandas でタイムスタンプオブジェクトを設定
timestamp = pd.Timestamp('2021-12-20 08:35:10')

# タイムスタンプを表示
print("Timestamp...\n",timestamp)

# CustomBusinessHour オフセットを作成
# CustomBusinessHour は DateOffset のサブクラス
# 有効な営業日の weekmask を指定
cbhOffset = pd.tseries.offsets.CustomBusinessHour(n = 5, weekmask = 'Mon Tue Wed Fri')

# CustomBusinessHour オフセットを表示
print("\nCustomBusinessHour Offset...\n",cbhOffset)

# タイムスタンプにオフセットを加算し、更新後のタイムスタンプを表示
print("\nUpdated Timestamp...\n",timestamp + cbhOffset)

# オフセット上にない場合はロールフォワード
roll = cbhOffset.rollforward(pd.Timestamp('2021-12-30 08:35:10'))

# 結果を表示
print("\nRoll forward Result...\n",roll)

出力結果

このコードを実行すると、次の出力が得られます。

Timestamp...
 2021-12-20 08:35:10

CustomBusinessHour Offset...
 <5 * CustomBusinessHours: CBH=09:00-17:00>

Updated Timestamp...
 2021-12-20 14:00:00

Roll forward Result...
 2021-12-31 09:00:00

解説

出力結果を見ると、2021-12-30 08:35:10 は木曜日ですが、weekmask で木曜日は営業日から除外されているため、オフセット上の日時ではありません。そのため rollforward() によって、翌営業日である金曜日の営業開始時刻 2021-12-31 09:00:00 へとロールフォワードされました。このように、CustomBusinessHour.rollforward() を使うことで、カスタマイズされた営業時間・営業日に基づいて、日付を適切に次の有効なオフセットへ進めることができます。

  1. 【Pandas入門】Pythonでタイムスタンプを比較する方法をわかりやすく解説

    はじめに:Pandasでのタイムスタンプ比較の基本 データ分析の現場では、日付や時刻のデータ(タイムスタンプ)を扱う場面が非常に多くあります。例えば「購入日と整備日の差は何日か」「特定の日付以降のレコードだけを抽出したい」といったケースです。 Pandasでは、インデックス演算子(角括弧 [])を使って列にアクセスし、タイムスタンプ同士を直接比較・差分計算することができます。この記事では、具体的なサンプルコードを通じて、その方法をわかりやすく解説します。 1. ライブラリのインポート まず、必要なライブラリであるPandasをインポートします。 import pandas as pd 2.

  2. PandasのオフセットをPythonの日付に変換する方法

    日付オブジェクトからPandasのオフセットを減算すると、結果は pandas Timestamp オブジェクトになります。このオブジェクトは、文字列形式の日付や、標準的なPythonの日付オブジェクト(datetime.date)に変換できます。また、datetime ライブラリの timedelta オブジェクトを使う方法もあります。Timestampオブジェクトが生成される例まず、日付からオフセットを引いたときにどのような型になるか確認してみましょう。from pandas.tseries.frequencies import to_offset import pandas as pd