Skip to content

Commit 82b0d2a

Browse files
committed
BUG: override min/max in DatetimeIndex to function as expected close #1895
1 parent 7526823 commit 82b0d2a

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

RELEASE.rst

+2
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ pandas 0.9.0
158158
array. Check other malformed inputs (#1899, #1897)
159159
- Rolling variance / standard deviation with only a single observation in
160160
window (#1884)
161+
- Fix unicode sheet name failure in to_excel (#1828)
162+
- Override DatetimeIndex.min/max to return Timestamp objects (#1895)
161163

162164
pandas 0.8.1
163165
============

pandas/tseries/index.py

+21
Original file line numberDiff line numberDiff line change
@@ -1370,6 +1370,27 @@ def indexer_between_time(self, start_time, end_time, include_start=True,
13701370

13711371
return mask.nonzero()[0]
13721372

1373+
def min(self, axis=None):
1374+
"""
1375+
Overridden ndarray.min to return a Timestamp
1376+
"""
1377+
if self.is_monotonic:
1378+
return self[0]
1379+
else:
1380+
min_stamp = self.asi8.min()
1381+
return Timestamp(min_stamp, tz=self.tz)
1382+
1383+
def max(self, axis=None):
1384+
"""
1385+
Overridden ndarray.max to return a Timestamp
1386+
"""
1387+
if self.is_monotonic:
1388+
return self[-1]
1389+
else:
1390+
max_stamp = self.asi8.max()
1391+
return Timestamp(max_stamp, tz=self.tz)
1392+
1393+
13731394
def _generate_regular_range(start, end, periods, offset):
13741395
if isinstance(offset, Tick):
13751396
stride = offset.nanos

pandas/tseries/tests/test_timeseries.py

+14
Original file line numberDiff line numberDiff line change
@@ -1678,6 +1678,20 @@ def test_setops_preserve_freq(self):
16781678
result = rng[:50].intersection(nofreq)
16791679
self.assert_(result.freq == rng.freq)
16801680

1681+
def test_min_max(self):
1682+
rng = date_range('1/1/2000', '12/31/2000')
1683+
rng2 = rng.take(np.random.permutation(len(rng)))
1684+
1685+
the_min = rng2.min()
1686+
the_max = rng2.max()
1687+
self.assert_(isinstance(the_min, Timestamp))
1688+
self.assert_(isinstance(the_max, Timestamp))
1689+
self.assertEqual(the_min, rng[0])
1690+
self.assertEqual(the_max, rng[-1])
1691+
1692+
self.assertEqual(rng.min(), rng[0])
1693+
self.assertEqual(rng.max(), rng[-1])
1694+
16811695

16821696
class TestLegacyCompat(unittest.TestCase):
16831697

0 commit comments

Comments
 (0)