Skip to content

Commit 4f66854

Browse files
committed
added version/issue info for 8839
1 parent f81bca6 commit 4f66854

File tree

4 files changed

+50
-35
lines changed

4 files changed

+50
-35
lines changed

doc/source/whatsnew/v0.24.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ Other Enhancements
8383
- :func:`read_html` copies cell data across ``colspan``s and ``rowspan``s, and it treats all-``th`` table rows as headers if ``header`` kwarg is not given and there is no ``thead`` (:issue:`17054`)
8484
- :meth:`Series.nlargest`, :meth:`Series.nsmallest`, :meth:`DataFrame.nlargest`, and :meth:`DataFrame.nsmallest` now accept the value ``"all"`` for the ``keep` argument. This keeps all ties for the nth largest/smallest value (:issue:`16818`)
8585
- :class:`IntervalIndex` has gained the :meth:`~IntervalIndex.set_closed` method to change the existing ``closed`` value (:issue:`21670`)
86+
- :func:`between_time` and :func:`at_time` now support an axis parameter (:issue: `8839`)
8687
-
8788

8889
.. _whatsnew_0240.api_breaking:

pandas/core/generic.py

+5
Original file line numberDiff line numberDiff line change
@@ -6774,6 +6774,9 @@ def at_time(self, time, asof=False, axis=None):
67746774
time : datetime.time or string
67756775
axis : int or string axis name, optional
67766776
6777+
.. versionadded:: 0.24.0
6778+
6779+
67776780
Returns
67786781
-------
67796782
values_at_time : same type as caller
@@ -6834,6 +6837,8 @@ def between_time(self, start_time, end_time, include_start=True,
68346837
include_end : boolean, default True
68356838
axis : int or string axis name, optional
68366839
6840+
.. versionadded:: 0.24.0
6841+
68376842
Returns
68386843
-------
68396844
values_between_time : same type as caller

pandas/tests/frame/test_timeseries.py

+43-35
Original file line numberDiff line numberDiff line change
@@ -640,21 +640,26 @@ def test_at_time_raises(self):
640640
with pytest.raises(TypeError): # index is not a DatetimeIndex
641641
df.at_time('00:00')
642642

643-
def test_at_time_axis(self):
643+
@pytest.mark.parametrize('time_axis', [
644+
(False, False), (True, False), (False, True), (True, True)])
645+
def test_at_time_axis(self, time_axis):
646+
# issue 8839
644647
rng = date_range('1/1/2000', '1/5/2000', freq='5min')
645648
ts = DataFrame(np.random.randn(len(rng), len(rng)))
646649

647650
indices = rng[(rng.hour == 9) & (rng.minute == 30) & (rng.second == 0)]
648651

649-
ts.index = rng
650-
expected = ts.loc[indices]
651-
result = ts.at_time('9:30', axis=0)
652-
assert_frame_equal(result, expected)
652+
if time_axis[0]:
653+
ts.index = rng
654+
expected = ts.loc[indices]
655+
result = ts.at_time('9:30', axis=0)
656+
assert_frame_equal(result, expected)
653657

654-
ts.columns = rng
655-
expected = ts.loc[:, indices]
656-
result = ts.at_time('9:30', axis=1)
657-
assert_frame_equal(result, expected)
658+
if time_axis[1]:
659+
ts.columns = rng
660+
expected = ts.loc[:, indices]
661+
result = ts.at_time('9:30', axis=1)
662+
assert_frame_equal(result, expected)
658663

659664
def test_between_time(self):
660665
rng = date_range('1/1/2000', '1/5/2000', freq='5min')
@@ -722,36 +727,39 @@ def test_between_time_raises(self):
722727
with pytest.raises(TypeError): # index is not a DatetimeIndex
723728
df.between_time(start_time='00:00', end_time='12:00')
724729

725-
def test_between_time_axis(self):
730+
@pytest.mark.parametrize('time_axis', [
731+
(False, False), (True, False), (False, True), (True, True)])
732+
def test_between_time_axis(self, time_axis):
733+
# issue 8839
726734
rng = date_range('1/1/2000', periods=100, freq='10min')
727735
blank = np.arange(0, len(rng))
728736
stime, etime = ('08:00:00', '09:00:00')
729-
dimn = (len(rng), len(rng))
737+
rand_data = np.random.randn(len(rng), len(rng))
730738
exp_len = 7
731-
for time_index, time_col in product([True, False], [True, False]):
732-
if time_index:
733-
index = rng
734-
else:
735-
index = blank
736-
if time_col:
737-
col = rng
738-
else:
739-
col = blank
740-
741-
ts = DataFrame(np.random.randn(*dimn), index=index, columns=col)
742-
743-
if time_index:
744-
assert len(ts.between_time(stime, etime)) == exp_len
745-
assert len(ts.between_time(stime, etime, axis=0)) == exp_len
746-
else:
747-
pytest.raises(TypeError, ts.between_time, stime, etime)
748-
pytest.raises(TypeError, ts.between_time, stime, etime, axis=0)
749-
750-
if time_col:
751-
selected = ts.between_time(stime, etime, axis=1).columns
752-
assert len(selected) == exp_len
753-
else:
754-
pytest.raises(TypeError, ts.between_time, stime, etime, axis=1)
739+
740+
if time_axis[0]:
741+
index = rng
742+
else:
743+
index = blank
744+
if time_axis[1]:
745+
col = rng
746+
else:
747+
col = blank
748+
749+
ts = DataFrame(rand_data, index=index, columns=col)
750+
751+
if time_axis[0]:
752+
assert len(ts.between_time(stime, etime)) == exp_len
753+
assert len(ts.between_time(stime, etime, axis=0)) == exp_len
754+
else:
755+
pytest.raises(TypeError, ts.between_time, stime, etime)
756+
pytest.raises(TypeError, ts.between_time, stime, etime, axis=0)
757+
758+
if time_axis[1]:
759+
selected = ts.between_time(stime, etime, axis=1).columns
760+
assert len(selected) == exp_len
761+
else:
762+
pytest.raises(TypeError, ts.between_time, stime, etime, axis=1)
755763

756764
def test_operation_on_NaT(self):
757765
# Both NaT and Timestamp are in DataFrame.

pandas/tests/series/test_timeseries.py

+1
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,7 @@ def test_between_time_formats(self):
818818
assert len(ts.between_time(*time_string)) == expected_length
819819

820820
def test_between_time_axis(self):
821+
# issue 8839
821822
rng = date_range('1/1/2000', periods=100, freq='10min')
822823
ts = Series(np.random.randn(len(rng)), index=rng)
823824
stime, etime = ('08:00:00', '09:00:00')

0 commit comments

Comments
 (0)