Skip to content

Commit e09091c

Browse files
committed
BUG: fix regression with SerieGrouper with Timestamp index (pandas-dev#42390)
This fixes a regression introduced in c355ed1 where cache is not initialized with correct state of islider and vslider. On Timestamp index this trigger a "ValueError Length of values does not match length of index" Closes pandas-dev#42390 Signed-off-by: Philippe Pepiot <[email protected]>
1 parent 5672766 commit e09091c

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

pandas/_libs/reduction.pyx

+10-8
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,6 @@ cdef class SeriesBinGrouper(_BaseGrouper):
165165

166166
result = np.empty(self.ngroups, dtype='O')
167167

168-
cached_index, cached_series = self._init_dummy_series_and_index(
169-
islider, vslider
170-
)
171-
172168
start = 0
173169
try:
174170
for i in range(self.ngroups):
@@ -178,6 +174,11 @@ cdef class SeriesBinGrouper(_BaseGrouper):
178174
islider.move(start, end)
179175
vslider.move(start, end)
180176

177+
if cached_index is None:
178+
cached_index, cached_series = self._init_dummy_series_and_index(
179+
islider, vslider
180+
)
181+
181182
self._update_cached_objs(
182183
cached_series, cached_index, islider, vslider)
183184

@@ -254,10 +255,6 @@ cdef class SeriesGrouper(_BaseGrouper):
254255

255256
result = np.empty(self.ngroups, dtype='O')
256257

257-
cached_index, cached_series = self._init_dummy_series_and_index(
258-
islider, vslider
259-
)
260-
261258
start = 0
262259
try:
263260
for i in range(n):
@@ -275,6 +272,11 @@ cdef class SeriesGrouper(_BaseGrouper):
275272
islider.move(start, end)
276273
vslider.move(start, end)
277274

275+
if cached_index is None:
276+
cached_index, cached_series = self._init_dummy_series_and_index(
277+
islider, vslider
278+
)
279+
278280
self._update_cached_objs(
279281
cached_series, cached_index, islider, vslider)
280282

pandas/tests/groupby/test_bin_groupby.py

+17
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,23 @@ def test_series_grouper():
2727
tm.assert_almost_equal(counts, exp_counts)
2828

2929

30+
def test_series_grouper_timestamp():
31+
# GH XXXX
32+
obj = Series([1], index=[pd.Timestamp("2018-01-16 00:00:00+00:00")], dtype=np.intp)
33+
labels = np.array([0])
34+
35+
def agg(series):
36+
# this should not raise
37+
if series.isna().values.all():
38+
return None
39+
return np.sum(series)
40+
41+
grouper = libreduction.SeriesGrouper(obj, agg, labels, 1)
42+
result, counts = grouper.get_result()
43+
tm.assert_almost_equal(result, np.array([1], dtype=object))
44+
tm.assert_almost_equal(counts, np.array([1]))
45+
46+
3047
def test_series_grouper_result_length_difference():
3148
# GH 40014
3249
obj = Series(np.random.randn(10), dtype="float64")

0 commit comments

Comments
 (0)