4
4
import warnings
5
5
from abc import ABC , abstractmethod
6
6
from collections .abc import Hashable , Iterator , Mapping , Sequence
7
+ from dataclasses import dataclass
7
8
from typing import (
8
9
TYPE_CHECKING ,
9
10
Any ,
@@ -513,10 +514,12 @@ class Grouper(ABC):
513
514
pass
514
515
515
516
517
+ @dataclass
516
518
class UniqueGrouper (Grouper ):
517
519
pass
518
520
519
521
522
+ @dataclass (init = False )
520
523
class BinGrouper (Grouper ):
521
524
def __init__ (self , bins , cut_kwargs : Mapping | None ):
522
525
if duck_array_ops .isnull (bins ).all ():
@@ -529,22 +532,14 @@ def __init__(self, bins, cut_kwargs: Mapping | None):
529
532
self .cut_kwargs = cut_kwargs
530
533
531
534
535
+ @dataclass
532
536
class TimeResampleGrouper (Grouper ):
533
- def __init__ (
534
- self ,
535
- freq : str ,
536
- closed : SideOptions | None ,
537
- label : SideOptions | None ,
538
- origin : str | DatetimeLike ,
539
- offset : pd .Timedelta | datetime .timedelta | str | None ,
540
- loffset : datetime .timedelta | str | None ,
541
- ):
542
- self .freq = freq
543
- self .closed = closed
544
- self .label = label
545
- self .origin = origin
546
- self .offset = offset
547
- self .loffset = loffset
537
+ freq : str
538
+ closed : SideOptions | None
539
+ label : SideOptions | None
540
+ origin : str | DatetimeLike | None
541
+ offset : pd .Timedelta | datetime .timedelta | str | None
542
+ loffset : datetime .timedelta | str | None
548
543
549
544
550
545
def _validate_groupby_squeeze (squeeze ):
0 commit comments