Skip to content

Commit a7f70b7

Browse files
GH1214 Improve typehinting for DataFrame.unstack (#1215)
* GH1214 Improve typehinting for DataFrame.unstack * GH1214 Fix test
1 parent d3fec83 commit a7f70b7

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

pandas-stubs/core/frame.pyi

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1312,7 +1312,8 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack):
13121312
def unstack(
13131313
self,
13141314
level: Level = ...,
1315-
fill_value: int | _str | dict | None = ...,
1315+
fill_value: Scalar | None = ...,
1316+
sort: _bool = ...,
13161317
) -> Self | Series: ...
13171318
def melt(
13181319
self,

tests/test_frame.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4367,3 +4367,64 @@ def test_df_loc_dict() -> None:
43674367

43684368
df.iloc[0] = {"X": 0}
43694369
check(assert_type(df, pd.DataFrame), pd.DataFrame)
4370+
4371+
4372+
def test_unstack() -> None:
4373+
"""Test different types of argument for `fill_value` in DataFrame.unstack."""
4374+
df = pd.DataFrame(
4375+
[
4376+
["a", "b", pd.Timestamp(2021, 3, 2)],
4377+
["a", "a", pd.Timestamp(2023, 4, 2)],
4378+
["b", "b", pd.Timestamp(2024, 3, 2)],
4379+
]
4380+
).set_index([0, 1])
4381+
df_sr = pd.DataFrame(
4382+
[
4383+
["a", "b", "abc"],
4384+
["a", "a", "def"],
4385+
["b", "b", "ghi"],
4386+
]
4387+
).set_index([0, 1])
4388+
df_flt = pd.DataFrame(
4389+
[
4390+
["a", "b", 1],
4391+
["a", "a", 12],
4392+
["b", "b", 14],
4393+
]
4394+
).set_index([0, 1])
4395+
4396+
check(assert_type(df.unstack(0), pd.DataFrame | pd.Series), pd.DataFrame)
4397+
check(
4398+
assert_type(
4399+
df.unstack(1, fill_value=pd.Timestamp(2023, 4, 5)), pd.DataFrame | pd.Series
4400+
),
4401+
pd.DataFrame,
4402+
)
4403+
check(
4404+
assert_type(df_flt.unstack(1, fill_value=0.0), pd.DataFrame | pd.Series),
4405+
pd.DataFrame,
4406+
)
4407+
check(
4408+
assert_type(df_flt.unstack(1, fill_value=1), pd.DataFrame | pd.Series),
4409+
pd.DataFrame,
4410+
)
4411+
check(
4412+
assert_type(df_sr.unstack(1, fill_value="string"), pd.DataFrame | pd.Series),
4413+
pd.DataFrame,
4414+
)
4415+
check(
4416+
assert_type(df.unstack(0, sort=False), pd.DataFrame | pd.Series), pd.DataFrame
4417+
)
4418+
check(
4419+
assert_type(
4420+
df.unstack(1, fill_value=pd.Timestamp(2023, 4, 5), sort=True),
4421+
pd.DataFrame | pd.Series,
4422+
),
4423+
pd.DataFrame,
4424+
)
4425+
check(
4426+
assert_type(
4427+
df_flt.unstack(1, fill_value=0.0, sort=False), pd.DataFrame | pd.Series
4428+
),
4429+
pd.DataFrame,
4430+
)

0 commit comments

Comments
 (0)