From 5a8d102ec60279520654d6e69dde8224aa153d04 Mon Sep 17 00:00:00 2001 From: luke <2736230899@qq.com> Date: Sun, 15 Jan 2023 12:21:44 +0800 Subject: [PATCH 1/5] determine groupby-transform not convert back type --- pandas/tests/groupby/transform/test_transform.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pandas/tests/groupby/transform/test_transform.py b/pandas/tests/groupby/transform/test_transform.py index 528f417ea1039..42f038c57cc70 100644 --- a/pandas/tests/groupby/transform/test_transform.py +++ b/pandas/tests/groupby/transform/test_transform.py @@ -1046,6 +1046,16 @@ def test_groupby_transform_with_datetimes(func, values): tm.assert_series_equal(result, expected) +def test_groupby_transform_dtype(): + # GH 22243 + df = DataFrame({"a": [1], "val": [1.35]}) + result = df.groupby("a")["val"].transform(lambda x: x.map("+{}".format)).dtype + original = df["val"].dtype + expected = df["val"].transform(lambda x: x.map("+{}".format)).dtype + assert result != original + assert result == expected + + @pytest.mark.parametrize("func", ["cumsum", "cumprod", "cummin", "cummax"]) def test_transform_absent_categories(func): # GH 16771 From a31f40f90a77788a0d35554950b3752e53bb9bf0 Mon Sep 17 00:00:00 2001 From: luke <2736230899@qq.com> Date: Sun, 15 Jan 2023 13:08:36 +0800 Subject: [PATCH 2/5] Replace format with f-string --- pandas/tests/groupby/transform/test_transform.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/tests/groupby/transform/test_transform.py b/pandas/tests/groupby/transform/test_transform.py index 42f038c57cc70..6b0d1e557f6f6 100644 --- a/pandas/tests/groupby/transform/test_transform.py +++ b/pandas/tests/groupby/transform/test_transform.py @@ -1049,9 +1049,9 @@ def test_groupby_transform_with_datetimes(func, values): def test_groupby_transform_dtype(): # GH 22243 df = DataFrame({"a": [1], "val": [1.35]}) - result = df.groupby("a")["val"].transform(lambda x: x.map("+{}".format)).dtype + result = df.groupby("a")["val"].transform(lambda x: f"+{x}").dtype original = df["val"].dtype - expected = df["val"].transform(lambda x: x.map("+{}".format)).dtype + expected = df["val"].transform(lambda x: f"+{x}").dtype assert result != original assert result == expected From a5734c9015b5a926368f40468f6fe5f3f1d5a614 Mon Sep 17 00:00:00 2001 From: luke <2736230899@qq.com> Date: Sun, 15 Jan 2023 20:33:03 +0800 Subject: [PATCH 3/5] assert whole DataFrame --- pandas/tests/groupby/transform/test_transform.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pandas/tests/groupby/transform/test_transform.py b/pandas/tests/groupby/transform/test_transform.py index 6b0d1e557f6f6..838ec22250d77 100644 --- a/pandas/tests/groupby/transform/test_transform.py +++ b/pandas/tests/groupby/transform/test_transform.py @@ -1049,11 +1049,9 @@ def test_groupby_transform_with_datetimes(func, values): def test_groupby_transform_dtype(): # GH 22243 df = DataFrame({"a": [1], "val": [1.35]}) - result = df.groupby("a")["val"].transform(lambda x: f"+{x}").dtype - original = df["val"].dtype - expected = df["val"].transform(lambda x: f"+{x}").dtype - assert result != original - assert result == expected + result = df.groupby("a")["val"].transform(lambda x: x.map(lambda y: f"+{y}")) + expected = Series(["+1.35"], name="val", dtype="object") + tm.assert_series_equal(result, expected) @pytest.mark.parametrize("func", ["cumsum", "cumprod", "cummin", "cummax"]) From 6a28b4474ad80a8e9b406daa29793ea6ccc285d7 Mon Sep 17 00:00:00 2001 From: luke <2736230899@qq.com> Date: Mon, 16 Jan 2023 11:51:26 +0800 Subject: [PATCH 4/5] add more cases --- pandas/tests/groupby/transform/test_transform.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/pandas/tests/groupby/transform/test_transform.py b/pandas/tests/groupby/transform/test_transform.py index 838ec22250d77..9e6a4d7ef6711 100644 --- a/pandas/tests/groupby/transform/test_transform.py +++ b/pandas/tests/groupby/transform/test_transform.py @@ -1049,9 +1049,21 @@ def test_groupby_transform_with_datetimes(func, values): def test_groupby_transform_dtype(): # GH 22243 df = DataFrame({"a": [1], "val": [1.35]}) + + result = df["val"].transform(lambda x: x.map("+{}".format)) + expected1 = Series(["+1.35"], name="val", dtype="object") + tm.assert_series_equal(result, expected1) + result = df.groupby("a")["val"].transform(lambda x: x.map(lambda y: f"+{y}")) - expected = Series(["+1.35"], name="val", dtype="object") - tm.assert_series_equal(result, expected) + tm.assert_series_equal(result, expected1) + + result = df.groupby("a")["val"].transform(lambda x: x.map(lambda y: f"+({y})")) + expected2 = Series(["+(1.35)"], name="val", dtype="object") + tm.assert_series_equal(result, expected2) + + df["val"] = df["val"].astype(object) + result = df.groupby("a")["val"].transform(lambda x: x.map(lambda y: f"+{y}")) + tm.assert_series_equal(result, expected1) @pytest.mark.parametrize("func", ["cumsum", "cumprod", "cummin", "cummax"]) From e484e762e4bac2b6397d1c2be447523431680cd3 Mon Sep 17 00:00:00 2001 From: luke <2736230899@qq.com> Date: Mon, 16 Jan 2023 13:20:39 +0800 Subject: [PATCH 5/5] instead format of f-string --- pandas/tests/groupby/transform/test_transform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/groupby/transform/test_transform.py b/pandas/tests/groupby/transform/test_transform.py index 9e6a4d7ef6711..ab4f2bd5e529b 100644 --- a/pandas/tests/groupby/transform/test_transform.py +++ b/pandas/tests/groupby/transform/test_transform.py @@ -1050,7 +1050,7 @@ def test_groupby_transform_dtype(): # GH 22243 df = DataFrame({"a": [1], "val": [1.35]}) - result = df["val"].transform(lambda x: x.map("+{}".format)) + result = df["val"].transform(lambda x: x.map(lambda y: f"+{y}")) expected1 = Series(["+1.35"], name="val", dtype="object") tm.assert_series_equal(result, expected1)