MCPcopy
hub / github.com/pandas-dev/pandas / _reindex_non_unique

Method _reindex_non_unique

pandas/core/indexes/base.py:4271–4340  ·  view source on GitHub ↗

Create a new index with target's values (move/add/delete values as necessary) use with non-unique Index and a possibly non-unique target. Parameters ---------- target : an iterable Returns ------- new_index : pd.Index Res

(
        self, target: Index
    )

Source from the content-addressed store, hash-verified

4269
4270 @final
4271 def _reindex_non_unique(
4272 self, target: Index
4273 ) -> tuple[Index, npt.NDArray[np.intp], npt.NDArray[np.intp] | None]:
4274 """
4275 Create a new index with target's values (move/add/delete values as
4276 necessary) use with non-unique Index and a possibly non-unique target.
4277
4278 Parameters
4279 ----------
4280 target : an iterable
4281
4282 Returns
4283 -------
4284 new_index : pd.Index
4285 Resulting index.
4286 indexer : np.ndarray[np.intp]
4287 Indices of output values in original index.
4288 new_indexer : np.ndarray[np.intp] or None
4289
4290 """
4291 target = ensure_index(target)
4292 if len(target) == 0:
4293 # GH#13691
4294 return self[:0], np.array([], dtype=np.intp), None
4295
4296 indexer, missing = self.get_indexer_non_unique(target)
4297 check = indexer != -1
4298 new_labels: Index | np.ndarray = self.take(indexer[check])
4299 new_indexer = None
4300
4301 if len(missing):
4302 length = np.arange(len(indexer), dtype=np.intp)
4303
4304 missing = ensure_platform_int(missing)
4305 missing_labels = target.take(missing)
4306 missing_indexer = length[~check]
4307 cur_labels = self.take(indexer[check]).values
4308 cur_indexer = length[check]
4309
4310 # Index constructor below will do inference
4311 new_labels = np.empty((len(indexer),), dtype=object)
4312 new_labels[cur_indexer] = cur_labels
4313 new_labels[missing_indexer] = missing_labels
4314
4315 # GH#38906
4316 if not len(self):
4317 new_indexer = np.arange(0, dtype=np.intp)
4318
4319 # a unique indexer
4320 elif target.is_unique:
4321 # see GH5553, make sure we use the right indexer
4322 new_indexer = np.arange(len(indexer), dtype=np.intp)
4323 new_indexer[cur_indexer] = np.arange(len(cur_labels))
4324 new_indexer[missing_indexer] = -1
4325
4326 # we have a non_unique selector, need to use the original
4327 # indexer here
4328 else:

Callers 1

_get_indexer_strictMethod · 0.95

Calls 7

takeMethod · 0.95
ensure_indexFunction · 0.85
IndexClass · 0.85
arrayMethod · 0.45
emptyMethod · 0.45
from_tuplesMethod · 0.45

Tested by

no test coverage detected