diff --git a/pandas/core/api.py b/pandas/core/api.py index aa37ddffa1156..640baf31268a7 100644 --- a/pandas/core/api.py +++ b/pandas/core/api.py @@ -7,7 +7,7 @@ from pandas.core.algorithms import factorize, unique, value_counts from pandas.core.dtypes.missing import isna, isnull, notna, notnull from pandas.core.arrays import Categorical -from pandas.core.groupby import Grouper +from pandas.core.groupby.groupby import Grouper from pandas.io.formats.format import set_eng_float_format from pandas.core.index import (Index, CategoricalIndex, Int64Index, UInt64Index, RangeIndex, Float64Index, diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 33617964d7e59..ae9d160db08e9 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -6589,7 +6589,7 @@ def groupby(self, by=None, axis=0, level=None, as_index=True, sort=True, resample : Convenience method for frequency conversion and resampling of time series. """ - from pandas.core.groupby import groupby + from pandas.core.groupby.groupby import groupby if level is None and by is None: raise TypeError("You have to supply one of 'by' and 'level'") diff --git a/pandas/core/groupby/__init__.py b/pandas/core/groupby/__init__.py new file mode 100644 index 0000000000000..4b2ebdf16b89b --- /dev/null +++ b/pandas/core/groupby/__init__.py @@ -0,0 +1,4 @@ +# flake8: noqa +from pandas.core.groupby.groupby import ( + Grouper, GroupBy, SeriesGroupBy, DataFrameGroupBy +) diff --git a/pandas/core/groupby.py b/pandas/core/groupby/groupby.py similarity index 100% rename from pandas/core/groupby.py rename to pandas/core/groupby/groupby.py diff --git a/pandas/core/panel.py b/pandas/core/panel.py index 7c087ac7deafc..e08d0a7368ccb 100644 --- a/pandas/core/panel.py +++ b/pandas/core/panel.py @@ -912,7 +912,7 @@ def groupby(self, function, axis='major'): ------- grouped : PanelGroupBy """ - from pandas.core.groupby import PanelGroupBy + from pandas.core.groupby.groupby import PanelGroupBy axis = self._get_axis_number(axis) return PanelGroupBy(self, function, axis=axis) diff --git a/pandas/core/resample.py b/pandas/core/resample.py index b3ab90fd67de4..0d0023b9f67d3 100644 --- a/pandas/core/resample.py +++ b/pandas/core/resample.py @@ -7,9 +7,10 @@ import pandas as pd from pandas.core.base import GroupByMixin -from pandas.core.groupby import (BinGrouper, Grouper, _GroupBy, GroupBy, - SeriesGroupBy, groupby, PanelGroupBy, - _pipe_template) +from pandas.core.groupby.groupby import ( + BinGrouper, Grouper, _GroupBy, GroupBy, SeriesGroupBy, groupby, + PanelGroupBy, _pipe_template +) from pandas.tseries.frequencies import to_offset, is_subperiod, is_superperiod from pandas.core.indexes.datetimes import DatetimeIndex, date_range diff --git a/pandas/core/reshape/pivot.py b/pandas/core/reshape/pivot.py index a4c9848dca900..74a9b59d3194a 100644 --- a/pandas/core/reshape/pivot.py +++ b/pandas/core/reshape/pivot.py @@ -6,7 +6,7 @@ from pandas.core.reshape.concat import concat from pandas.core.series import Series -from pandas.core.groupby import Grouper +from pandas.core.groupby.groupby import Grouper from pandas.core.reshape.util import cartesian_product from pandas.core.index import Index, _get_objs_combined_axis from pandas.compat import range, lrange, zip diff --git a/pandas/tests/groupby/aggregate/test_aggregate.py b/pandas/tests/groupby/aggregate/test_aggregate.py index 7cc6c2fa7b88c..d85719d328ff2 100644 --- a/pandas/tests/groupby/aggregate/test_aggregate.py +++ b/pandas/tests/groupby/aggregate/test_aggregate.py @@ -10,7 +10,7 @@ import pandas as pd from pandas import concat, DataFrame, Index, MultiIndex, Series -from pandas.core.groupby import Grouping, SpecificationError +from pandas.core.groupby.groupby import Grouping, SpecificationError from pandas.compat import OrderedDict import pandas.util.testing as tm diff --git a/pandas/tests/groupby/aggregate/test_cython.py b/pandas/tests/groupby/aggregate/test_cython.py index cef3a699ed24b..80383c895a5e5 100644 --- a/pandas/tests/groupby/aggregate/test_cython.py +++ b/pandas/tests/groupby/aggregate/test_cython.py @@ -14,7 +14,7 @@ from pandas import (bdate_range, DataFrame, Index, Series, Timestamp, Timedelta, NaT) -from pandas.core.groupby import DataError +from pandas.core.groupby.groupby import DataError import pandas.util.testing as tm diff --git a/pandas/tests/groupby/aggregate/test_other.py b/pandas/tests/groupby/aggregate/test_other.py index 4c407ad8a0d93..7c6cb5b9615cb 100644 --- a/pandas/tests/groupby/aggregate/test_other.py +++ b/pandas/tests/groupby/aggregate/test_other.py @@ -18,7 +18,7 @@ from pandas import ( date_range, DataFrame, Index, MultiIndex, PeriodIndex, period_range, Series ) -from pandas.core.groupby import SpecificationError +from pandas.core.groupby.groupby import SpecificationError from pandas.io.formats.printing import pprint_thing import pandas.util.testing as tm diff --git a/pandas/tests/groupby/test_bin_groupby.py b/pandas/tests/groupby/test_bin_groupby.py index 979b2f7a539af..c293f49c5bc2a 100644 --- a/pandas/tests/groupby/test_bin_groupby.py +++ b/pandas/tests/groupby/test_bin_groupby.py @@ -54,7 +54,7 @@ def setup_method(self, method): self.bins = np.array([3, 6], dtype=np.int64) def test_generate_bins(self): - from pandas.core.groupby import generate_bins_generic + from pandas.core.groupby.groupby import generate_bins_generic values = np.array([1, 2, 3, 4, 5, 6], dtype=np.int64) binner = np.array([0, 3, 6, 9], dtype=np.int64) diff --git a/pandas/tests/groupby/test_grouping.py b/pandas/tests/groupby/test_grouping.py index 8702062e9cd0a..57becd342d370 100644 --- a/pandas/tests/groupby/test_grouping.py +++ b/pandas/tests/groupby/test_grouping.py @@ -340,7 +340,7 @@ def test_groupby_grouper_f_sanity_checked(self): pytest.raises(AssertionError, ts.groupby, lambda key: key[0:6]) def test_grouping_error_on_multidim_input(self): - from pandas.core.groupby import Grouping + from pandas.core.groupby.groupby import Grouping pytest.raises(ValueError, Grouping, self.df.index, self.df[['A', 'A']]) diff --git a/pandas/tests/groupby/test_timegrouper.py b/pandas/tests/groupby/test_timegrouper.py index d359bfa5351a9..17ca5d31b6b59 100644 --- a/pandas/tests/groupby/test_timegrouper.py +++ b/pandas/tests/groupby/test_timegrouper.py @@ -57,11 +57,12 @@ def test_groupby_with_timegrouper(self): result3 = df.groupby(pd.Grouper(freq='5D')).sum() assert_frame_equal(result3, expected) - def test_groupby_with_timegrouper_methods(self): + @pytest.mark.parametrize("should_sort", [True, False]) + def test_groupby_with_timegrouper_methods(self, should_sort): # GH 3881 # make sure API of timegrouper conforms - df_original = pd.DataFrame({ + df = pd.DataFrame({ 'Branch': 'A A A A A B'.split(), 'Buyer': 'Carl Mark Carl Joe Joe Carl'.split(), 'Quantity': [1, 3, 5, 8, 9, 3], @@ -75,16 +76,18 @@ def test_groupby_with_timegrouper_methods(self): ] }) - df_sorted = df_original.sort_values(by='Quantity', ascending=False) + if should_sort: + df = df.sort_values(by='Quantity', ascending=False) - for df in [df_original, df_sorted]: - df = df.set_index('Date', drop=False) - g = df.groupby(pd.Grouper(freq='6M')) - assert g.group_keys - assert isinstance(g.grouper, pd.core.groupby.BinGrouper) - groups = g.groups - assert isinstance(groups, dict) - assert len(groups) == 3 + df = df.set_index('Date', drop=False) + g = df.groupby(pd.Grouper(freq='6M')) + assert g.group_keys + + import pandas.core.groupby.groupby + assert isinstance(g.grouper, pandas.core.groupby.groupby.BinGrouper) + groups = g.groups + assert isinstance(groups, dict) + assert len(groups) == 3 def test_timegrouper_with_reg_groups(self): diff --git a/pandas/tests/groupby/test_transform.py b/pandas/tests/groupby/test_transform.py index bce38b8cf9eed..23326d1b105fe 100644 --- a/pandas/tests/groupby/test_transform.py +++ b/pandas/tests/groupby/test_transform.py @@ -13,7 +13,7 @@ from .common import MixIn, assert_fp_equal from pandas.util.testing import assert_frame_equal, assert_series_equal -from pandas.core.groupby import DataError +from pandas.core.groupby.groupby import DataError from pandas.core.config import option_context diff --git a/pandas/tests/test_resample.py b/pandas/tests/test_resample.py index 23cc18de34778..ef09b64d5b6eb 100644 --- a/pandas/tests/test_resample.py +++ b/pandas/tests/test_resample.py @@ -21,7 +21,7 @@ from pandas.core.dtypes.generic import ABCSeries, ABCDataFrame from pandas.compat import range, lrange, zip, product, OrderedDict from pandas.errors import UnsupportedFunctionCall -from pandas.core.groupby import DataError +from pandas.core.groupby.groupby import DataError import pandas.core.common as com from pandas.tseries.frequencies import to_offset