From 4373883d48b3dbd613b5a9b662efc7642885204c Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Sat, 11 Nov 2023 08:13:59 -0500 Subject: [PATCH 1/2] fix off-by-one in aggregations --- pandas/core/indexers/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/indexers/objects.py b/pandas/core/indexers/objects.py index c13ec51ff3851..f96582583396b 100644 --- a/pandas/core/indexers/objects.py +++ b/pandas/core/indexers/objects.py @@ -109,7 +109,7 @@ def get_window_bounds( end = np.arange(1 + offset, num_values + 1 + offset, step, dtype="int64") start = end - self.window_size - if closed in ["left", "both"]: + if closed in ["left", "both"] or self.window_size == 0: start -= 1 if closed in ["left", "neither"]: end -= 1 From 0af0474afb0f95a642cf0b57f5054248ba6b1eff Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Mon, 13 Nov 2023 09:18:01 -0500 Subject: [PATCH 2/2] fix logic --- pandas/core/indexers/objects.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexers/objects.py b/pandas/core/indexers/objects.py index f96582583396b..f2db4886a5590 100644 --- a/pandas/core/indexers/objects.py +++ b/pandas/core/indexers/objects.py @@ -102,14 +102,14 @@ def get_window_bounds( closed: str | None = None, step: int | None = None, ) -> tuple[np.ndarray, np.ndarray]: - if center: + if center or self.window_size == 0: offset = (self.window_size - 1) // 2 else: offset = 0 end = np.arange(1 + offset, num_values + 1 + offset, step, dtype="int64") start = end - self.window_size - if closed in ["left", "both"] or self.window_size == 0: + if closed in ["left", "both"]: start -= 1 if closed in ["left", "neither"]: end -= 1