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 メソッドよりも新しい方法です