Skip to content

Commit 7a90824

Browse files
authored
CLN: Grouping.__init__ logic belonging in _convert_grouper (#41424)
1 parent fb70ca4 commit 7a90824

File tree

1 file changed

+13
-21
lines changed

1 file changed

+13
-21
lines changed

pandas/core/groupby/grouper.py

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616
from pandas.errors import InvalidIndexError
1717
from pandas.util._decorators import cache_readonly
1818

19+
from pandas.core.dtypes.cast import sanitize_to_nanoseconds
1920
from pandas.core.dtypes.common import (
2021
is_categorical_dtype,
21-
is_datetime64_dtype,
2222
is_list_like,
2323
is_scalar,
24-
is_timedelta64_dtype,
2524
)
2625

2726
import pandas.core.algorithms as algorithms
@@ -466,9 +465,6 @@ def __init__(
466465
if isinstance(grouper, (Series, Index)) and name is None:
467466
self.name = grouper.name
468467

469-
if isinstance(grouper, MultiIndex):
470-
self.grouper = grouper._values
471-
472468
# we have a single grouper which may be a myriad of things,
473469
# some of which are dependent on the passing in level
474470

@@ -506,14 +502,9 @@ def __init__(
506502
self.grouper = grouper._get_grouper()
507503

508504
else:
509-
if self.grouper is None and self.name is not None and self.obj is not None:
510-
self.grouper = self.obj[self.name]
511-
512-
elif isinstance(self.grouper, (list, tuple)):
513-
self.grouper = com.asarray_tuplesafe(self.grouper)
514505

515506
# a passed Categorical
516-
elif is_categorical_dtype(self.grouper):
507+
if is_categorical_dtype(self.grouper):
517508

518509
self.grouper, self.all_grouper = recode_for_groupby(
519510
self.grouper, self.sort, observed
@@ -539,7 +530,7 @@ def __init__(
539530
)
540531

541532
# we are done
542-
if isinstance(self.grouper, Grouping):
533+
elif isinstance(self.grouper, Grouping):
543534
self.grouper = self.grouper.grouper
544535

545536
# no level passed
@@ -562,14 +553,10 @@ def __init__(
562553
self.grouper = None # Try for sanity
563554
raise AssertionError(errmsg)
564555

565-
# if we have a date/time-like grouper, make sure that we have
566-
# Timestamps like
567-
if getattr(self.grouper, "dtype", None) is not None:
568-
if is_datetime64_dtype(self.grouper):
569-
self.grouper = self.grouper.astype("datetime64[ns]")
570-
elif is_timedelta64_dtype(self.grouper):
571-
572-
self.grouper = self.grouper.astype("timedelta64[ns]")
556+
if isinstance(self.grouper, np.ndarray):
557+
# if we have a date/time-like grouper, make sure that we have
558+
# Timestamps like
559+
self.grouper = sanitize_to_nanoseconds(self.grouper)
573560

574561
def __repr__(self) -> str:
575562
return f"Grouping({self.name})"
@@ -876,9 +863,14 @@ def _convert_grouper(axis: Index, grouper):
876863
return grouper._values
877864
else:
878865
return grouper.reindex(axis)._values
879-
elif isinstance(grouper, (list, Series, Index, np.ndarray)):
866+
elif isinstance(grouper, MultiIndex):
867+
return grouper._values
868+
elif isinstance(grouper, (list, tuple, Series, Index, np.ndarray)):
880869
if len(grouper) != len(axis):
881870
raise ValueError("Grouper and axis must be same length")
871+
872+
if isinstance(grouper, (list, tuple)):
873+
grouper = com.asarray_tuplesafe(grouper)
882874
return grouper
883875
else:
884876
return grouper

0 commit comments

Comments
 (0)