Skip to content

Commit c0d4cf1

Browse files
phoflyehoshuadimarsky
authored andcommitted
Bug: Resample ignoring closed=right for TimedeltaIndex (pandas-dev#45539)
* Bug: Resample ignoring closed=right for TimedeltaIndex * Fix typo
1 parent 0042cfc commit c0d4cf1

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

doc/source/whatsnew/v1.5.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ Plotting
246246

247247
Groupby/resample/rolling
248248
^^^^^^^^^^^^^^^^^^^^^^^^
249-
-
249+
- Bug in :meth:`DataFrame.resample` ignoring ``closed="right"`` on :class:`TimedeltaIndex` (:issue:`45414`)
250250
-
251251

252252
Reshaping

pandas/core/resample.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -1702,12 +1702,19 @@ def _get_time_delta_bins(self, ax: TimedeltaIndex):
17021702
return binner, [], labels
17031703

17041704
start, end = ax.min(), ax.max()
1705+
1706+
if self.closed == "right":
1707+
end += self.freq
1708+
17051709
labels = binner = timedelta_range(
17061710
start=start, end=end, freq=self.freq, name=ax.name
17071711
)
17081712

1709-
end_stamps = labels + self.freq
1710-
bins = ax.searchsorted(end_stamps, side="left")
1713+
end_stamps = labels
1714+
if self.closed == "left":
1715+
end_stamps += self.freq
1716+
1717+
bins = ax.searchsorted(end_stamps, side=self.closed)
17111718

17121719
if self.offset:
17131720
# GH 10530 & 31809

pandas/tests/resample/test_timedelta.py

+14
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,17 @@ def test_resample_quantile_timedelta():
191191
index=pd.date_range("20200101", periods=2, tz="UTC", freq="2D"),
192192
)
193193
tm.assert_frame_equal(result, expected)
194+
195+
196+
def test_resample_closed_right():
197+
# GH#45414
198+
idx = pd.Index([pd.Timedelta(seconds=120 + i * 30) for i in range(10)])
199+
ser = Series(range(10), index=idx)
200+
result = ser.resample("T", closed="right", label="right").sum()
201+
expected = Series(
202+
[0, 3, 7, 11, 15, 9],
203+
index=pd.TimedeltaIndex(
204+
[pd.Timedelta(seconds=120 + i * 60) for i in range(6)], freq="T"
205+
),
206+
)
207+
tm.assert_series_equal(result, expected)

0 commit comments

Comments
 (0)