pandas.tseries.offsets.QuarterBegin.is_anchored の詳細解説と代替方法
pandas.tseries.offsets.QuarterBegin
は、pandasライブラリで提供される「四半期初め」を表すオフセットです。is_anchored
メソッドは、このオフセットが「固定された日付」に基づいているかどうかを判定します。
詳細
is_anchored
メソッドは、以下のいずれかの条件を満たす場合に True
を返します。
startingMonth
属性が None でない (つまり、四半期の開始月が固定されている)n
属性が 1 である (つまり、四半期ごとに 1 回だけオフセットが発生する)
これらの条件を満たさない場合、is_anchored
メソッドは False
を返します。
import pandas as pd
# 四半期ごとに 1 回だけオフセットが発生する
offset1 = pd.tseries.offsets.QuarterBegin(n=1)
print(offset1.is_anchored()) # True
# 四半期の開始月が 1 月に固定されている
offset2 = pd.tseries.offsets.QuarterBegin(startingMonth=1)
print(offset2.is_anchored()) # True
# 四半期ごとに 2 回オフセットが発生する
offset3 = pd.tseries.offsets.QuarterBegin(n=2)
print(offset3.is_anchored()) # False
# 四半期の開始月が固定されていない
offset4 = pd.tseries.offsets.QuarterBegin(startingMonth=None)
print(offset4.is_anchored()) # False
import pandas as pd
# 四半期の開始月を 1 月に固定
offset = pd.tseries.offsets.QuarterBegin(startingMonth=1)
# 2023 年 1 月 1 日から開始し、10 回オフセットを適用
dates = pd.date_range(start='2023-01-01', periods=10, freq=offset)
print(dates)
import pandas as pd
# 四半期ごとに 2 回オフセット
offset = pd.tseries.offsets.QuarterBegin(n=2)
# 2023 年 1 月 1 日から開始し、10 回オフセットを適用
dates = pd.date_range(start='2023-01-01', periods=10, freq=offset)
print(dates)
このコードは、2023 年 1 月 1 日から始まり、四半期ごとに 2 回ずつ、計 10 回の日付を生成します。各日付は、四半期の最初の月と 4 ヶ月後の月になります。
import pandas as pd
# 四半期ごとに 1 回オフセット
offset1 = pd.tseries.offsets.QuarterBegin(n=1)
print(offset1.is_anchored()) # True
# 四半期の開始月が 1 月に固定されている
offset2 = pd.tseries.offsets.QuarterBegin(startingMonth=1)
print(offset2.is_anchored()) # True
# 四半期ごとに 2 回オフセット
offset3 = pd.tseries.offsets.QuarterBegin(n=2)
print(offset3.is_anchored()) # False
# 四半期の開始月が固定されていない
offset4 = pd.tseries.offsets.QuarterBegin(startingMonth=None)
print(offset4.is_anchored()) # False
obj.n == 1 を使用する
is_anchored
メソッドは、オフセットが「固定された日付」に基づいているかどうかを判定します。つまり、n
属性が 1 である場合、または startingMonth
属性が None でない場合は、固定された日付に基づいているとみなされます。
したがって、is_anchored
メソッドの代わりに、以下の式を使用することができます。
obj.n == 1
この式は、obj
オブジェクトの n
属性が 1 であるかどうかを判定します。n
属性が 1 である場合、オフセットは固定された日付に基づいていることになります。
例
import pandas as pd
offset1 = pd.tseries.offsets.QuarterBegin(n=1)
offset2 = pd.tseries.offsets.QuarterBegin(startingMonth=1)
offset3 = pd.tseries.offsets.QuarterBegin(n=2)
offset4 = pd.tseries.offsets.QuarterBegin(startingMonth=None)
print(offset1.n == 1) # True
print(offset2.n == 1) # True
print(offset3.n == 1) # False
print(offset4.startingMonth is not None) # True
obj.is_anchored_to_date を使用する
pandas 1.2.0 以降では、is_anchored_to_date
メソッドが追加されました。このメソッドは、オフセットが固定された日付に基づいているかどうかをより詳細に判定します。
is_anchored_to_date
メソッドは、以下のいずれかの条件を満たす場合に True
を返します。
origin
属性が None でないstartingMonth
属性が None でないn
属性が 1 である
これらの条件を満たさない場合、is_anchored_to_date
メソッドは False
を返します。
例
import pandas as pd
offset1 = pd.tseries.offsets.QuarterBegin(n=1)
offset2 = pd.tseries.offsets.QuarterBegin(startingMonth=1)
offset3 = pd.tseries.offsets.QuarterBegin(n=2)
offset4 = pd.tseries.offsets.QuarterBegin(startingMonth=None)
print(offset1.is_anchored_to_date()) # True
print(offset2.is_anchored_to_date()) # True
print(offset3.is_anchored_to_date()) # False
print(offset4.is_anchored_to_date()) # True
obj.is_on_offset を使用する
is_on_offset
メソッドは、指定された日付がオフセットの開始日かどうかを判定します。このメソッドを使用して、オフセットが固定された日付に基づいているかどうかを間接的に判定することができます。
例
import pandas as pd
offset1 = pd.tseries.offsets.QuarterBegin(n=1)
offset2 = pd.tseries.offsets.QuarterBegin(startingMonth=1)
offset3 = pd.tseries.offsets.QuarterBegin(n=2)
offset4 = pd.tseries.offsets.QuarterBegin(startingMonth=None)
date1 = pd.Timestamp('2023-01-01')
date2 = pd.Timestamp('2023-04-01')
date3 = pd.Timestamp('2023-02-15')
date4 = pd.Timestamp('2023-01-01')
print(offset1.is_on_offset(date1)) # True
print(offset2.is_on_offset(date2)) # True
print(offset3.is_on_offset(date3)) # False
print(offset4.is_on_offset(date4)) # True
is_anchored_to_date
メソッドは、is_anchored
メソッドよりも新しい方法です