diff --git a/pandas/_libs/tslibs/offsets.pyx b/pandas/_libs/tslibs/offsets.pyx index 30a1490fdf862..d3baeba72e81e 100644 --- a/pandas/_libs/tslibs/offsets.pyx +++ b/pandas/_libs/tslibs/offsets.pyx @@ -30,7 +30,7 @@ from pandas._libs.tslibs.util cimport is_integer_object, is_datetime64_object from pandas._libs.tslibs.base cimport ABCTimestamp from pandas._libs.tslibs.ccalendar import ( - MONTHS, DAYS, MONTH_ALIASES, MONTH_TO_CAL_NUM, weekday_to_int, int_to_weekday, + MONTH_ALIASES, MONTH_TO_CAL_NUM, weekday_to_int, int_to_weekday, ) from pandas._libs.tslibs.ccalendar cimport get_days_in_month, dayofweek from pandas._libs.tslibs.conversion cimport ( @@ -45,53 +45,6 @@ from pandas._libs.tslibs.tzconversion cimport tz_convert_single from .timedeltas cimport delta_to_nanoseconds -# --------------------------------------------------------------------- -# Constants - -_offset_to_period_map = { - 'WEEKDAY': 'D', - 'EOM': 'M', - 'BM': 'M', - 'BQS': 'Q', - 'QS': 'Q', - 'BQ': 'Q', - 'BA': 'A', - 'AS': 'A', - 'BAS': 'A', - 'MS': 'M', - 'D': 'D', - 'C': 'C', - 'B': 'B', - 'T': 'T', - 'S': 'S', - 'L': 'L', - 'U': 'U', - 'N': 'N', - 'H': 'H', - 'Q': 'Q', - 'A': 'A', - 'W': 'W', - 'M': 'M', - 'Y': 'A', - 'BY': 'A', - 'YS': 'A', - 'BYS': 'A'} - -need_suffix = ['QS', 'BQ', 'BQS', 'YS', 'AS', 'BY', 'BA', 'BYS', 'BAS'] - -for __prefix in need_suffix: - for _m in MONTHS: - key = f'{__prefix}-{_m}' - _offset_to_period_map[key] = _offset_to_period_map[__prefix] - -for __prefix in ['A', 'Q']: - for _m in MONTHS: - _alias = f'{__prefix}-{_m}' - _offset_to_period_map[_alias] = _alias - -for _d in DAYS: - _offset_to_period_map[f'W-{_d}'] = f'W-{_d}' - # --------------------------------------------------------------------- # Misc Helpers diff --git a/pandas/tseries/frequencies.py b/pandas/tseries/frequencies.py index 47ae66ac4f91b..7516d9748c18f 100644 --- a/pandas/tseries/frequencies.py +++ b/pandas/tseries/frequencies.py @@ -5,13 +5,18 @@ from pandas._libs.algos import unique_deltas from pandas._libs.tslibs import Timestamp -from pandas._libs.tslibs.ccalendar import MONTH_ALIASES, MONTH_NUMBERS, int_to_weekday +from pandas._libs.tslibs.ccalendar import ( + DAYS, + MONTH_ALIASES, + MONTH_NUMBERS, + MONTHS, + int_to_weekday, +) from pandas._libs.tslibs.fields import build_field_sarray from pandas._libs.tslibs.offsets import ( # noqa:F401 DateOffset, Day, _get_offset, - _offset_to_period_map, to_offset, ) from pandas._libs.tslibs.parsing import get_rule_month @@ -39,6 +44,51 @@ # --------------------------------------------------------------------- # Offset names ("time rules") and related functions +_offset_to_period_map = { + "WEEKDAY": "D", + "EOM": "M", + "BM": "M", + "BQS": "Q", + "QS": "Q", + "BQ": "Q", + "BA": "A", + "AS": "A", + "BAS": "A", + "MS": "M", + "D": "D", + "C": "C", + "B": "B", + "T": "T", + "S": "S", + "L": "L", + "U": "U", + "N": "N", + "H": "H", + "Q": "Q", + "A": "A", + "W": "W", + "M": "M", + "Y": "A", + "BY": "A", + "YS": "A", + "BYS": "A", +} + +_need_suffix = ["QS", "BQ", "BQS", "YS", "AS", "BY", "BA", "BYS", "BAS"] + +for _prefix in _need_suffix: + for _m in MONTHS: + key = f"{_prefix}-{_m}" + _offset_to_period_map[key] = _offset_to_period_map[_prefix] + +for _prefix in ["A", "Q"]: + for _m in MONTHS: + _alias = f"{_prefix}-{_m}" + _offset_to_period_map[_alias] = _alias + +for _d in DAYS: + _offset_to_period_map[f"W-{_d}"] = f"W-{_d}" + def get_period_alias(offset_str: str) -> Optional[str]: """