Pandas Data Offsets と BDay の使い方

2024-04-02

Pandas Data Offsets と BDay の使い方

BDay とは

BDay は、Data Offsets の中でも ビジネスデイ を扱うためのオフセットです。つまり、土日や祝日を除いた営業日のみを加算・減算することができます。

BDay の使い方

BDay は以下の方法で使用できます。

  • 単独で使用する
from pandas.tseries.offsets import BDay

today = pd.to_datetime('2023-11-14')

next_business_day = today + BDay(1)
print(next_business_day)

# 出力: 2023-11-15
  • DateOffset と組み合わせて使用する
from pandas.tseries.offsets import BDay, DateOffset

offset = BDay(2) + DateOffset(months=1)

date = pd.to_datetime('2023-11-14')

new_date = date + offset
print(new_date)

# 出力: 2024-01-03
  • Series や DataFrame に適用する
df = pd.DataFrame({'Date': pd.to_datetime(['2023-11-14', '2023-11-15', '2023-11-16'])})

df['Next Business Day'] = df['Date'] + BDay(1)

print(df)

# 出力:
#       Date  Next Business Day
# 0  2023-11-14       2023-11-15
# 1  2023-11-15       2023-11-16
# 2  2023-11-16       2023-11-20

BDay のオプション

BDay は以下のオプションを受け取ります。

  • n: 加算・減算するビジネスデイの数
  • holidays: 祝日のリスト
  • calendar: カレンダー (デフォルトは 'USFederalHolidayCalendar')
from pandas.tseries.offsets import BDay

# 祝日を設定
holidays = ['2023-11-23', '2023-11-24']

# カレンダーを設定
calendar = 'NYSE'

offset = BDay(2, holidays=holidays, calendar=calendar)

date = pd.to_datetime('2023-11-14')

new_date = date + offset
print(new_date)

# 出力: 2023-11-28

BDay を使用することで、ビジネスデイに基づいた日付の操作を簡単に実行することができます。オプションを活用することで、より柔軟な操作が可能になります。



Pandas BDay サンプルコード集

前後のビジネスデイを取得する

from pandas.tseries.offsets import BDay

# 今日
today = pd.to_datetime('2023-11-14')

# 前のビジネスデイ
previous_business_day = today - BDay(1)

# 次のビジネスデイ
next_business_day = today + BDay(1)

print(f"前のビジネスデイ: {previous_business_day}")
print(f"次のビジネスデイ: {next_business_day}")
前のビジネスデイ: 2023-11-13
次のビジネスデイ: 2023-11-15

ビジネスデイを指定した数だけ進める

from pandas.tseries.offsets import BDay

# 今日
today = pd.to_datetime('2023-11-14')

# 5営業日後
five_business_days_later = today + BDay(5)

print(f"5営業日後: {five_business_days_later}")

出力:

5営業日後: 2023-11-21

祝日を含む期間の営業日数を計算する

from pandas.tseries.offsets import BDay

# 開始日
start_date = pd.to_datetime('2023-11-14')

# 終了日
end_date = pd.to_datetime('2023-11-24')

# 祝日
holidays = ['2023-11-23']

# 営業日数
business_days = BDay(holidays=holidays).apply(start_date, end_date) + 1

print(f"営業日数: {business_days}")

出力:

営業日数: 8

特定の曜日のみを含む期間の営業日数を計算する

from pandas.tseries.offsets import BDay

# 開始日
start_date = pd.to_datetime('2023-11-14')

# 終了日
end_date = pd.to_datetime('2023-11-24')

# 月曜日から金曜日のみ
weekmask = 'Mon Tue Wed Thu Fri'

# 営業日数
business_days = BDay(weekmask=weekmask).apply(start_date, end_date) + 1

print(f"営業日数: {business_days}")

出力:

営業日数: 7

特定のカレンダーに基づいて営業日数を計算する

from pandas.tseries.offsets import BDay

# 開始日
start_date = pd.to_datetime('2023-11-14')

# 終了日
end_date = pd.to_datetime('2023-11-24')

# カレンダー
calendar = 'NYSE'

# 営業日数
business_days = BDay(calendar=calendar).apply(start_date, end_date) + 1

print(f"営業日数: {business_days}")

出力:

営業日数: 8

Series/DataFrame に BDay を適用する

import pandas as pd

# データフレーム
df = pd.DataFrame({'Date': pd.to_datetime(['2023-11-14', '2023-11-15', '2023-11-16'])})

# 次のビジネスデイ列を追加
df['Next Business Day'] = df['Date'] + BDay(1)

print(df)

出力:

       Date  Next Business Day
0  2023-11-14       2023-11-15
1  2023-11-15       2023-11-16
2  2023-11-16       2023-11-20

これらのサンプルコードは、BDay の使い方を理解するのに役立つでしょう。ご自身のニーズに合わせて、コードを改造してみてください。



BDay 以外の方法

DateOffset は、BDay よりも汎用性の高いオフセットです。BDay のようにビジネスデイのみを扱うだけでなく、日数、月数、年数などのオフセットを指定することができます。

from pandas.tseries.offsets import DateOffset

# 今日
today = pd.to_datetime('2023-11-14')

# 5日後
five_days_later = today + DateOffset(days=5)

# 1ヶ月後
one_month_later = today + DateOffset(months=1)

# 1年後
one_year_later = today + DateOffset(years=1)

print(f"5日後: {five_days_later}")
print(f"1ヶ月後: {one_month_later}")
print(f"1年後: {one_year_later}")

出力:

5日後: 2023-11-19
1ヶ月後: 2023-12-14
1年後: 2024-11-14

shift() メソッドは、Series や DataFrame の日付列を前後にずらすことができます。

import pandas as pd

# データフレーム
df = pd.DataFrame({'Date': pd.to_datetime(['2023-11-14', '2023-11-15', '2023-11-16'])})

# 1日前のデータを追加
df['Previous Day'] = df['Date'].shift(1)

# 1日後のデータを追加
df['Next Day'] = df['Date'].shift(-1)

print(df)

出力:

       Date  Previous Day  Next Day
0  2023-11-14       NaT  2023-11-15
1  2023-11-15  2023-11-14  2023-11-16
2  2023-11-16  2023-11-15       NaT

apply() メソッドは、Series や DataFrame の各要素に任意の関数を適用することができます。

import pandas as pd

# データフレーム
df = pd.DataFrame({'Date': pd.to_datetime(['2023-11-14', '2023-11-15', '2023-11-16'])})

# 曜日を取得
df['Weekday'] = df['Date'].apply(lambda x: x.weekday())

print(df)

出力:

       Date  Weekday
0  2023-11-14       1
1  2023-11-15       2
2  2023-11-16       3

これらの方法は、BDay と組み合わせて使用することもできます。

BDay は、ビジネスデイに基づいた日付操作を行うための便利なツールです。しかし、その他にも様々な方法があります。ご自身のニーズに合わせて、最適な方法を選択してください。




Pandas Data Offsets で日付操作を賢く:Day.is_month_end を使いこなそう

主な機能:日付の加算・減算:1 日、1 週間、1 か月など、さまざまな単位で日付を簡単に操作できます。特定の日付パターンへのアクセス:月末、四半期末、年末など、特定の日付パターンに一致する日付を取得できます。時系列データの分析:DateOffset を使用して、時系列データの分析を容易にすることができます。



Pandasで営業日オフセットを扱う: BusinessHour.normalize 完全解説

pandas. tseries. offsets. BusinessHour. normalizeは、BusinessHourオフセットを正規化するために使用されます。これは、オフセットが営業日の開始時刻に丸められることを意味します。引数normalize: Trueの場合、オフセットは営業日の開始時刻に丸められます。Falseの場合、オフセットは変更されません。


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

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


pandas.tseries.offsets.CustomBusinessHour.nanos 属性の詳細解説

pandas. tseries. offsets. CustomBusinessHour. nanos は、pandas ライブラリの CustomBusinessHour クラスで使用される属性です。この属性は、ナノ秒単位のカスタムビジネス時間のオフセットを設定するために使用されます。


Pandas.tseries.offsets.BusinessHour.weekmask徹底解説

pandas. tseries. offsets. BusinessHour. weekmask は、BusinessHour オブジェクトで使用される属性で、曜日ごとにビジネスデーとして扱われるかどうかを指定します。デフォルトでは月曜日から金曜日までの営業日がビジネスデーとなりますが、weekmask を使用して、この設定を変更することができます。



Pandas YearEnd オフセット:DatetimeIndex/Series/Resampling との連携

YearEnd オフセットは、年末 に日付を進めるオフセットです。例えば、2023-03-08 に YearEnd オフセットを適用すると、2023-12-31 になります。YearEnd オフセットは、以下のパラメータを受け取ります。n: オフセットの回数 (デフォルトは 1)


Pandas TimedeltaIndex.to_series の 12 個のサンプルコードで、時間差データ分析をスキルアップ!

pandas. TimedeltaIndex. to_series は、TimedeltaIndex を Series に変換する関数です。この関数は、時間差データを分析する際に役立ちます。入力index : 変換する TimedeltaIndex


PandasのResampler.semで時系列データの標準偏差と標準誤差を理解する

sem メソッドは、以下の引数を受け取ります:axis : 集計軸。デフォルトは 0 です。level : 集計レベル。デフォルトは None です。ddof : 自由度補正。デフォルトは 1 です。以下の例では、df データフレームの 'A' 列の月ごとの標準誤差を計算します。


Pandas GroupBy.count 以外に使える!グループ内の要素数をカウントする5つの方法

pandas. core. groupby. GroupBy. count は、Pandas の GroupBy オブジェクトで利用できるメソッドの一つです。このメソッドは、グループ内の各グループの要素数を計算します。使い方GroupBy


Pandas.Period.hour のサンプルコード集:様々な時間操作をマスター

pandas. Period. hour は、pandas. Period オブジェクトに含まれる時刻情報のうち、時間に関する属性を取得するためのプロパティです。入出力pandas. Period. hour は、読み取り専用のプロパティであり、書き込みはできません。