From 0b8776823350f7ad7f3292542279ea79a2d7d306 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Thu, 2 Jan 2020 12:38:38 -0800 Subject: [PATCH] REF: delegate more IntervalIndex methods --- pandas/core/indexes/interval.py | 63 +++++++-------------------------- 1 file changed, 12 insertions(+), 51 deletions(-) diff --git a/pandas/core/indexes/interval.py b/pandas/core/indexes/interval.py index abc82dd3c73f5..3488d6e643783 100644 --- a/pandas/core/indexes/interval.py +++ b/pandas/core/indexes/interval.py @@ -199,7 +199,14 @@ def func(intvidx_self, other, sort=False): ) @accessor.delegate_names( delegate=IntervalArray, - accessors=["__array__", "overlaps", "contains"], + accessors=[ + "__array__", + "overlaps", + "contains", + "set_closed", + "to_tuples", + "__len__", + ], typ="method", overwrite=True, ) @@ -389,57 +396,10 @@ def __contains__(self, key) -> bool: except KeyError: return False - @Appender( - _interval_shared_docs["to_tuples"] - % dict( - return_type="Index", - examples=""" - Examples - -------- - >>> idx = pd.IntervalIndex.from_arrays([0, np.nan, 2], [1, np.nan, 3]) - >>> idx.to_tuples() - Index([(0.0, 1.0), (nan, nan), (2.0, 3.0)], dtype='object') - >>> idx.to_tuples(na_tuple=False) - Index([(0.0, 1.0), nan, (2.0, 3.0)], dtype='object') - """, - ) - ) - def to_tuples(self, na_tuple=True): - tuples = self._data.to_tuples(na_tuple=na_tuple) - return Index(tuples) - @cache_readonly def _multiindex(self): return MultiIndex.from_arrays([self.left, self.right], names=["left", "right"]) - @Appender( - _interval_shared_docs["set_closed"] - % dict( - klass="IntervalIndex", - examples=textwrap.dedent( - """\ - Examples - -------- - >>> index = pd.interval_range(0, 3) - >>> index - IntervalIndex([(0, 1], (1, 2], (2, 3]], - closed='right', - dtype='interval[int64]') - >>> index.set_closed('both') - IntervalIndex([[0, 1], [1, 2], [2, 3]], - closed='both', - dtype='interval[int64]') - """ - ), - ) - ) - def set_closed(self, closed): - array = self._data.set_closed(closed) - return self._simple_new(array, self.name) # TODO: can we use _shallow_copy? - - def __len__(self) -> int: - return len(self.left) - @cache_readonly def values(self): """ @@ -1051,8 +1011,7 @@ def take(self, indices, axis=0, allow_fill=True, fill_value=None, **kwargs): result = self._data.take( indices, axis=axis, allow_fill=allow_fill, fill_value=fill_value, **kwargs ) - attributes = self._get_attributes_dict() - return self._simple_new(result, **attributes) + return self._shallow_copy(result) def __getitem__(self, value): result = self._data[value] @@ -1253,7 +1212,9 @@ def _delegate_method(self, name, *args, **kwargs): res = method(*args, **kwargs) if is_scalar(res) or name in self._raw_inherit: return res - return type(self)(res, name=self.name) + if isinstance(res, IntervalArray): + return type(self)._simple_new(res, name=self.name) + return Index(res) IntervalIndex._add_logical_methods_disabled()