Skip to content

Commit 1b1c127

Browse files
stephenlrandallStephen Randall
andauthored
Update types for Series.unstack, DataFrame.stack, and DataFrame.unstack (#1259)
* update types, add tests * remove unnecessary test * added check --------- Co-authored-by: Stephen Randall <[email protected]>
1 parent fdda5a6 commit 1b1c127

File tree

4 files changed

+18
-5
lines changed

4 files changed

+18
-5
lines changed

pandas-stubs/core/frame.pyi

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,18 +1317,18 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack):
13171317
) -> Self: ...
13181318
@overload
13191319
def stack(
1320-
self, level: Level | list[Level] = ..., dropna: _bool = ..., sort: _bool = ...
1320+
self, level: IndexLabel = ..., dropna: _bool = ..., sort: _bool = ...
13211321
) -> Self | Series: ...
13221322
@overload
13231323
def stack(
1324-
self, level: Level | list[Level] = ..., future_stack: _bool = ...
1324+
self, level: IndexLabel = ..., future_stack: _bool = ...
13251325
) -> Self | Series: ...
13261326
def explode(
13271327
self, column: Sequence[Hashable], ignore_index: _bool = ...
13281328
) -> Self: ...
13291329
def unstack(
13301330
self,
1331-
level: Level = ...,
1331+
level: IndexLabel = ...,
13321332
fill_value: Scalar | None = ...,
13331333
sort: _bool = ...,
13341334
) -> Self | Series: ...

pandas-stubs/core/series.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
934934
def explode(self) -> Series[S1]: ...
935935
def unstack(
936936
self,
937-
level: Level = ...,
937+
level: IndexLabel = ...,
938938
fill_value: int | _str | dict | None = ...,
939939
) -> DataFrame: ...
940940
@overload

tests/test_frame.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4461,6 +4461,7 @@ def test_unstack() -> None:
44614461
).set_index([0, 1])
44624462

44634463
check(assert_type(df.unstack(0), pd.DataFrame | pd.Series), pd.DataFrame)
4464+
check(assert_type(df.unstack([0]), pd.DataFrame | pd.Series), pd.DataFrame)
44644465
check(
44654466
assert_type(
44664467
df.unstack(1, fill_value=pd.Timestamp(2023, 4, 5)), pd.DataFrame | pd.Series

tests/test_series.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3902,11 +3902,23 @@ def test_series_items() -> None:
39023902

39033903

39043904
def test_cumsum_timedelta() -> None:
3905-
39063905
s = pd.Series(pd.to_timedelta([1, 2, 3], "h"))
39073906
check(assert_type(s.cumsum(), "TimedeltaSeries"), pd.Series, pd.Timedelta)
39083907
check(
39093908
assert_type(pd.Timestamp(0) + s.cumsum(), "TimestampSeries"),
39103909
pd.Series,
39113910
pd.Timestamp,
39123911
)
3912+
3913+
3914+
def test_series_unstack() -> None:
3915+
df = pd.DataFrame([[1, 3, 5], [2, 4, 6]])
3916+
s = df.transpose().stack([*range(df.index.nlevels)])
3917+
check(assert_type(s, Union[pd.Series, pd.DataFrame]), pd.Series)
3918+
check(
3919+
assert_type(
3920+
s.unstack([*range(s.index.nlevels // 2)]),
3921+
Union[pd.Series, pd.DataFrame],
3922+
),
3923+
pd.DataFrame,
3924+
)

0 commit comments

Comments
 (0)