Skip to content

Commit 017d70c

Browse files
authored
REF: implement PeriodDtypeBase.resolution (#42162)
1 parent da57db2 commit 017d70c

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

pandas/_libs/tslibs/dtypes.pyx

+13
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ cdef class PeriodDtypeBase:
2727
# See also: libperiod.get_freq_group
2828
return (self._dtype_code // 1000) * 1000
2929

30+
@property
31+
def resolution(self) -> "Resolution":
32+
fgc = self.freq_group_code
33+
return Resolution.from_freq_group(FreqGroup(fgc))
34+
3035
@property
3136
def date_offset(self):
3237
"""
@@ -259,6 +264,14 @@ class Resolution(Enum):
259264

260265
return cls.from_attrname(attr_name)
261266

267+
@classmethod
268+
def from_freq_group(cls, freq_group: FreqGroup) -> "Resolution":
269+
abbrev = _reverse_period_code_map[freq_group.value].split("-")[0]
270+
if abbrev == "B":
271+
return cls.RESO_DAY
272+
attrname = _abbrev_to_attrnames[abbrev]
273+
return cls.from_attrname(attrname)
274+
262275

263276
cdef dict _reso_str_map = {
264277
Resolution.RESO_NS.value: "nanosecond",

pandas/core/indexes/period.py

+2-10
Original file line numberDiff line numberDiff line change
@@ -424,17 +424,9 @@ def get_loc(self, key, method=None, tolerance=None):
424424
raise KeyError(f"Cannot interpret '{key}' as period") from err
425425

426426
reso = Resolution.from_attrname(reso_str)
427-
grp = reso.freq_group.value
428-
freqn = self.dtype.freq_group_code
429427

430-
# _get_string_slice will handle cases where grp < freqn
431-
assert grp >= freqn
432-
433-
# BusinessDay is a bit strange. It has a *lower* code, but we never parse
434-
# a string as "BusinessDay" resolution, just Day.
435-
if grp == freqn or (
436-
reso == Resolution.RESO_DAY and self.dtype.freq.name == "B"
437-
):
428+
if reso == self.dtype.resolution:
429+
# the reso < self.dtype.resolution case goes through _get_string_slice
438430
key = Period(asdt, freq=self.freq)
439431
loc = self.get_loc(key, method=method, tolerance=tolerance)
440432
return loc

0 commit comments

Comments
 (0)