From e1b0b627232c604739dbfb50449648f3a2237363 Mon Sep 17 00:00:00 2001 From: Loic Diridollou Date: Wed, 6 Nov 2024 18:34:15 -0500 Subject: [PATCH 1/2] GH1025 Typehint DataFrame.groupby.value_counts method --- pandas-stubs/core/groupby/generic.pyi | 23 +++++++++++++++++++++-- tests/test_frame.py | 20 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/pandas-stubs/core/groupby/generic.pyi b/pandas-stubs/core/groupby/generic.pyi index 512599acc..ed4e595be 100644 --- a/pandas-stubs/core/groupby/generic.pyi +++ b/pandas-stubs/core/groupby/generic.pyi @@ -300,9 +300,10 @@ class DataFrameGroupBy(GroupBy[DataFrame], Generic[ByT, _TT]): backend: str | None = ..., **kwargs, ) -> PlotAxes | Series: ... # Series[PlotAxes] + # def size(self: DataFrameGroupBy[ByT, Literal[True]]) -> Series[int]: ... @overload def value_counts( - self, + self: DataFrameGroupBy[ByT, Literal[True]], subset: ListLike | None = ..., normalize: Literal[False] = ..., sort: bool = ..., @@ -311,13 +312,31 @@ class DataFrameGroupBy(GroupBy[DataFrame], Generic[ByT, _TT]): ) -> Series[int]: ... @overload def value_counts( - self, + self: DataFrameGroupBy[ByT, Literal[True]], subset: ListLike | None, normalize: Literal[True], sort: bool = ..., ascending: bool = ..., dropna: bool = ..., ) -> Series[float]: ... + @overload + def value_counts( + self: DataFrameGroupBy[ByT, Literal[False]], + subset: ListLike | None = ..., + normalize: Literal[False] = ..., + sort: bool = ..., + ascending: bool = ..., + dropna: bool = ..., + ) -> DataFrame: ... + @overload + def value_counts( + self: DataFrameGroupBy[ByT, Literal[False]], + subset: ListLike | None, + normalize: Literal[True], + sort: bool = ..., + ascending: bool = ..., + dropna: bool = ..., + ) -> DataFrame: ... def take( self, indices: TakeIndexer, axis: Axis | None | NoDefault = ..., **kwargs ) -> DataFrame: ... diff --git a/tests/test_frame.py b/tests/test_frame.py index 7a167f53d..bee41a201 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -1026,6 +1026,7 @@ def test_types_pivot_table() -> None: def test_types_groupby_as_index() -> None: + """Test type of groupby.size method depending on `as_index`.""" df = pd.DataFrame({"a": [1, 2, 3]}) check( assert_type( @@ -1043,6 +1044,25 @@ def test_types_groupby_as_index() -> None: ) +def test_types_groupby_as_index_value_counts() -> None: + """Test type of groupby.value_counts method depending on `as_index`.""" + df = pd.DataFrame({"a": [1, 2, 3]}) + check( + assert_type( + df.groupby("a", as_index=False).value_counts(), + pd.DataFrame, + ), + pd.DataFrame, + ) + check( + assert_type( + df.groupby("a", as_index=True).value_counts(), + "pd.Series[int]", + ), + pd.Series, + ) + + def test_types_groupby_size() -> None: """Test for GH886.""" data = [ From 622eca773cc9b8db0765054beaf9d64c1f6281e8 Mon Sep 17 00:00:00 2001 From: Loic Diridollou Date: Thu, 7 Nov 2024 20:08:12 -0500 Subject: [PATCH 2/2] GH1025 Remove commented code --- pandas-stubs/core/groupby/generic.pyi | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas-stubs/core/groupby/generic.pyi b/pandas-stubs/core/groupby/generic.pyi index ed4e595be..8172b1b4c 100644 --- a/pandas-stubs/core/groupby/generic.pyi +++ b/pandas-stubs/core/groupby/generic.pyi @@ -300,7 +300,6 @@ class DataFrameGroupBy(GroupBy[DataFrame], Generic[ByT, _TT]): backend: str | None = ..., **kwargs, ) -> PlotAxes | Series: ... # Series[PlotAxes] - # def size(self: DataFrameGroupBy[ByT, Literal[True]]) -> Series[int]: ... @overload def value_counts( self: DataFrameGroupBy[ByT, Literal[True]],