Skip to content

Commit 81bf29f

Browse files
committed
ENH: return DatetimeIndex with metadata from unique. close #2563
1 parent 15bcc0a commit 81bf29f

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

pandas/tseries/index.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,18 @@ def take(self, indices, axis=0):
770770
taken = self.values.take(indices, axis=axis)
771771
return self._simple_new(taken, self.name, None, self.tz)
772772

773+
def unique(self):
774+
"""
775+
Index.unique with handling for DatetimeIndex metadata
776+
777+
Returns
778+
-------
779+
result : DatetimeIndex
780+
"""
781+
result = Int64Index.unique(self)
782+
return DatetimeIndex._simple_new(result, tz=self.tz,
783+
name=self.name)
784+
773785
def union(self, other):
774786
"""
775787
Specialized union for DatetimeIndex objects. If combine

pandas/tseries/tests/test_timeseries.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,15 @@ def test_index_unique(self):
6363
uniques = self.dups.index.unique()
6464
self.assert_(uniques.dtype == 'M8[ns]') # sanity
6565

66+
# #2563
67+
self.assertTrue(isinstance(uniques, DatetimeIndex))
68+
69+
dups_local = self.dups.index.tz_localize('US/Eastern')
70+
dups_local.name = 'foo'
71+
result = dups_local.unique()
72+
self.assertTrue(result.tz is not None)
73+
self.assertEquals(result.name, 'foo')
74+
6675
def test_index_dupes_contains(self):
6776
d = datetime(2011, 12, 5, 20, 30)
6877
ix=DatetimeIndex([d,d])

vb_suite/timeseries.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,11 @@ def date_range(start=None, end=None, periods=None, freq=None):
204204

205205
dti_reset_index_tz = \
206206
Benchmark('df.reset_index()', setup, start_date=datetime(2012,9,1))
207+
208+
setup = common_setup + """
209+
rng = date_range('1/1/2000', periods=10000, freq='T')
210+
index = rng.repeat(10)
211+
"""
212+
213+
datetimeindex_unique = Benchmark('index.unique()', setup,
214+
date=datetime(2012, 7, 1))

0 commit comments

Comments
 (0)