From da71a458c190936fdfc428af5d1decf306dbe6ef Mon Sep 17 00:00:00 2001 From: ihsan Date: Mon, 29 Apr 2019 21:21:15 +0300 Subject: [PATCH 1/6] TST: Test pd.Grouper base floating point error (#25161) --- pandas/tests/groupby/test_grouping.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pandas/tests/groupby/test_grouping.py b/pandas/tests/groupby/test_grouping.py index 013c370899de1..0dc122ba2e961 100644 --- a/pandas/tests/groupby/test_grouping.py +++ b/pandas/tests/groupby/test_grouping.py @@ -203,6 +203,18 @@ def test_grouper_creation_bug(self): expected = s.groupby(level='one').sum() assert_series_equal(result, expected) + # GH25161 + s = Series(np.arange(10), + index=pd.date_range( + "2018-11-26 16:17:43.51", + periods=10, freq="1S")) + t0 = s.index[0] + base = t0.minute + (t0.second + t0.microsecond / 1e6) / 60 + g = s.groupby(pd.Grouper(freq="10min", base=base)) + result = g.size() + expected = pd.Series(10, index=Index([t0])) + assert_series_equal(result, expected) + def test_grouper_column_and_index(self): # GH 14327 From f993901f93266efe458fac0502ba2fdfac36ab51 Mon Sep 17 00:00:00 2001 From: ihsan Date: Mon, 29 Apr 2019 21:58:08 +0300 Subject: [PATCH 2/6] TST: Create a new function for testing grouper base (#25161) --- pandas/tests/groupby/test_grouping.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pandas/tests/groupby/test_grouping.py b/pandas/tests/groupby/test_grouping.py index 0dc122ba2e961..3791471854b7b 100644 --- a/pandas/tests/groupby/test_grouping.py +++ b/pandas/tests/groupby/test_grouping.py @@ -203,18 +203,6 @@ def test_grouper_creation_bug(self): expected = s.groupby(level='one').sum() assert_series_equal(result, expected) - # GH25161 - s = Series(np.arange(10), - index=pd.date_range( - "2018-11-26 16:17:43.51", - periods=10, freq="1S")) - t0 = s.index[0] - base = t0.minute + (t0.second + t0.microsecond / 1e6) / 60 - g = s.groupby(pd.Grouper(freq="10min", base=base)) - result = g.size() - expected = pd.Series(10, index=Index([t0])) - assert_series_equal(result, expected) - def test_grouper_column_and_index(self): # GH 14327 @@ -315,6 +303,18 @@ def test_grouper_getting_correct_binner(self): def test_grouper_iter(self, df): assert sorted(df.groupby('A').grouper) == ['bar', 'foo'] + def test_grouper_base(self): + # GH25161 + s = Series(np.arange(10), + index=pd.date_range( + "2018-11-26 16:17:43.51", + periods=10, freq="1S")) + base = t0.minute + (t0.second + t0.microsecond / 1e6) / 60 + g = s.groupby(pd.Grouper(freq="10min", base=base)) + result = g.size() + expected = pd.Series(10, index=Index([t0])) + assert_series_equal(result, expected) + def test_empty_groups(self, df): # see gh-1048 with pytest.raises(ValueError, match="No group keys passed!"): From 1c2175d1ceb142ee499bd6d97d7915845be403bf Mon Sep 17 00:00:00 2001 From: ihsan Date: Mon, 29 Apr 2019 22:44:39 +0300 Subject: [PATCH 3/6] TST: Clarify the test using literal values (#26240) --- pandas/tests/groupby/test_grouping.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pandas/tests/groupby/test_grouping.py b/pandas/tests/groupby/test_grouping.py index 3791471854b7b..ec1483651361e 100644 --- a/pandas/tests/groupby/test_grouping.py +++ b/pandas/tests/groupby/test_grouping.py @@ -305,14 +305,14 @@ def test_grouper_iter(self, df): def test_grouper_base(self): # GH25161 - s = Series(np.arange(10), - index=pd.date_range( - "2018-11-26 16:17:43.51", - periods=10, freq="1S")) - base = t0.minute + (t0.second + t0.microsecond / 1e6) / 60 - g = s.groupby(pd.Grouper(freq="10min", base=base)) + dt = pd.to_datetime(["2018-11-26 16:17:43.51", + "2018-11-26 16:17:44.51", + "2018-11-26 16:17:45.51"]) + s = Series(np.arange(3), index=dt) + base = 17 + 43.51 / 60 + g = s.groupby(pd.Grouper(freq="3min", base=base)) result = g.size() - expected = pd.Series(10, index=Index([t0])) + expected = Series(3, index=[dt[0]]) assert_series_equal(result, expected) def test_empty_groups(self, df): From 11485fbe159d0dbe3743990ee76a0f766120b74b Mon Sep 17 00:00:00 2001 From: ihsan Date: Wed, 1 May 2019 22:46:40 +0300 Subject: [PATCH 4/6] TST: Move test to resample/test_datetime_index and rename (#25161) --- pandas/tests/groupby/test_grouping.py | 12 ------------ pandas/tests/resample/test_datetime_index.py | 13 +++++++++++++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/pandas/tests/groupby/test_grouping.py b/pandas/tests/groupby/test_grouping.py index ec1483651361e..013c370899de1 100644 --- a/pandas/tests/groupby/test_grouping.py +++ b/pandas/tests/groupby/test_grouping.py @@ -303,18 +303,6 @@ def test_grouper_getting_correct_binner(self): def test_grouper_iter(self, df): assert sorted(df.groupby('A').grouper) == ['bar', 'foo'] - def test_grouper_base(self): - # GH25161 - dt = pd.to_datetime(["2018-11-26 16:17:43.51", - "2018-11-26 16:17:44.51", - "2018-11-26 16:17:45.51"]) - s = Series(np.arange(3), index=dt) - base = 17 + 43.51 / 60 - g = s.groupby(pd.Grouper(freq="3min", base=base)) - result = g.size() - expected = Series(3, index=[dt[0]]) - assert_series_equal(result, expected) - def test_empty_groups(self, df): # see gh-1048 with pytest.raises(ValueError, match="No group keys passed!"): diff --git a/pandas/tests/resample/test_datetime_index.py b/pandas/tests/resample/test_datetime_index.py index b5cc28e07fca6..b1cab047e87b5 100644 --- a/pandas/tests/resample/test_datetime_index.py +++ b/pandas/tests/resample/test_datetime_index.py @@ -751,6 +751,19 @@ def test_resample_base(): tm.assert_index_equal(resampled.index, exp_rng) +def test_resample_float_base(): + # GH25161 + dt = pd.to_datetime(["2018-11-26 16:17:43.51", + "2018-11-26 16:17:44.51", + "2018-11-26 16:17:45.51"]) + s = Series(np.arange(3), index=dt) + base = 17 + 43.51 / 60 + g = s.groupby(pd.Grouper(freq="3min", base=base)) + result = g.size() + expected = Series(3, index=[dt[0]]) + assert_series_equal(result, expected) + + def test_resample_daily_anchored(): rng = date_range('1/1/2000 0:00:00', periods=10000, freq='T') ts = Series(np.random.randn(len(rng)), index=rng) From 3b6d5f4d04abf06c8b642014cad7a0031d2983ed Mon Sep 17 00:00:00 2001 From: ihsan Date: Wed, 1 May 2019 23:02:45 +0300 Subject: [PATCH 5/6] TST: Clarify resample float base test (#25161) Use resample() which is what Grouper calls, assert index instead of result of size() --- pandas/tests/resample/test_datetime_index.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pandas/tests/resample/test_datetime_index.py b/pandas/tests/resample/test_datetime_index.py index b1cab047e87b5..88fb7b3b5828e 100644 --- a/pandas/tests/resample/test_datetime_index.py +++ b/pandas/tests/resample/test_datetime_index.py @@ -757,11 +757,11 @@ def test_resample_float_base(): "2018-11-26 16:17:44.51", "2018-11-26 16:17:45.51"]) s = Series(np.arange(3), index=dt) + base = 17 + 43.51 / 60 - g = s.groupby(pd.Grouper(freq="3min", base=base)) - result = g.size() - expected = Series(3, index=[dt[0]]) - assert_series_equal(result, expected) + resampled = s.resample("3min", base=base).mean() + exp_index = DatetimeIndex(["2018-11-26 16:17:43.51"]) + tm.assert_index_equal(resampled.index, exp_index) def test_resample_daily_anchored(): From 913dd1c4e4d013fc4161e7386ec541383f320960 Mon Sep 17 00:00:00 2001 From: ihsan Date: Thu, 2 May 2019 13:38:27 +0300 Subject: [PATCH 6/6] TST: Test if whole Series is as expected (#25161) --- pandas/tests/resample/test_datetime_index.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/tests/resample/test_datetime_index.py b/pandas/tests/resample/test_datetime_index.py index 88fb7b3b5828e..c2868979e9d8d 100644 --- a/pandas/tests/resample/test_datetime_index.py +++ b/pandas/tests/resample/test_datetime_index.py @@ -759,9 +759,9 @@ def test_resample_float_base(): s = Series(np.arange(3), index=dt) base = 17 + 43.51 / 60 - resampled = s.resample("3min", base=base).mean() - exp_index = DatetimeIndex(["2018-11-26 16:17:43.51"]) - tm.assert_index_equal(resampled.index, exp_index) + result = s.resample("3min", base=base).size() + expected = Series(3, index=pd.DatetimeIndex(["2018-11-26 16:17:43.51"])) + assert_series_equal(result, expected) def test_resample_daily_anchored():