99from pandas .util ._decorators import Appender , Substitution , cache_readonly
1010
1111from pandas .core .dtypes .common import (
12+ ensure_platform_int ,
1213 is_bool_dtype ,
1314 is_datetime64_any_dtype ,
1415 is_float ,
@@ -618,7 +619,7 @@ def get_value(self, series, key):
618619 elif grp == freqn :
619620 key = Period (asdt , freq = self .freq ).ordinal
620621 return com .maybe_box (
621- self , self ._engine .get_value (s , key ), series , key
622+ self , self ._int64index .get_value (s , key ), series , key
622623 )
623624 else :
624625 raise KeyError (key )
@@ -627,7 +628,7 @@ def get_value(self, series, key):
627628
628629 period = Period (key , self .freq )
629630 key = period .value if isna (period ) else period .ordinal
630- return com .maybe_box (self , self ._engine .get_value (s , key ), series , key )
631+ return com .maybe_box (self , self ._int64index .get_value (s , key ), series , key )
631632
632633 @Appender (_index_shared_docs ["get_indexer" ] % _index_doc_kwargs )
633634 def get_indexer (self , target , method = None , limit = None , tolerance = None ):
@@ -648,6 +649,23 @@ def get_indexer(self, target, method=None, limit=None, tolerance=None):
648649 tolerance = self ._convert_tolerance (tolerance , target )
649650 return Index .get_indexer (self ._int64index , target , method , limit , tolerance )
650651
652+ @Appender (_index_shared_docs ["get_indexer_non_unique" ] % _index_doc_kwargs )
653+ def get_indexer_non_unique (self , target ):
654+ target = ensure_index (target )
655+
656+ if isinstance (target , PeriodIndex ):
657+ target = target .asi8
658+ if hasattr (target , "freq" ) and target .freq != self .freq :
659+ msg = DIFFERENT_FREQ .format (
660+ cls = type (self ).__name__ ,
661+ own_freq = self .freqstr ,
662+ other_freq = target .freqstr ,
663+ )
664+ raise IncompatibleFrequency (msg )
665+
666+ indexer , missing = self ._int64index .get_indexer_non_unique (target )
667+ return ensure_platform_int (indexer ), missing
668+
651669 def _get_unique_index (self , dropna = False ):
652670 """
653671 wrap Index._get_unique_index to handle NaT
@@ -954,6 +972,12 @@ def base(self):
954972 )
955973 return np .asarray (self ._data )
956974
975+ def memory_usage (self , deep = False ):
976+ result = super ().memory_usage (deep = deep )
977+ if hasattr (self , "_cache" ) and "_int64index" in self ._cache :
978+ result += self ._int64index .memory_usage (deep = deep )
979+ return result
980+
957981
958982PeriodIndex ._add_comparison_ops ()
959983PeriodIndex ._add_numeric_methods_disabled ()
0 commit comments