|
19 | 19 | date_range,
|
20 | 20 | )
|
21 | 21 | import pandas._testing as tm
|
| 22 | +from pandas.core.groupby import NamedAgg |
22 | 23 | from pandas.tests.groupby import get_groupby_method_args
|
23 | 24 |
|
24 | 25 |
|
@@ -84,6 +85,44 @@ def demean(arr):
|
84 | 85 | tm.assert_frame_equal(result, expected)
|
85 | 86 |
|
86 | 87 |
|
| 88 | +def test_transform_with_namedagg(): |
| 89 | + df = DataFrame({"A": list("aaabbbccc"), "B": range(9), "D": range(9, 18)}) |
| 90 | + result = df.groupby("A").transform( |
| 91 | + b_min=NamedAgg(column="B", aggfunc="min"), |
| 92 | + d_sum=NamedAgg(column="D", aggfunc="sum"), |
| 93 | + ) |
| 94 | + expected = DataFrame( |
| 95 | + { |
| 96 | + "b_min": [0, 0, 0, 3, 3, 3, 6, 6, 6], |
| 97 | + "d_sum": [30, 30, 30, 39, 39, 39, 48, 48, 48], |
| 98 | + } |
| 99 | + ) |
| 100 | + tm.assert_frame_equal(result, expected) |
| 101 | + |
| 102 | + |
| 103 | +def test_transform_with_list_like(): |
| 104 | + df = DataFrame({"col": list("aab"), "val": range(3)}) |
| 105 | + result = df.groupby("col").transform(["sum", "min"]) |
| 106 | + expected = DataFrame({"val_sum": [1, 1, 2], "val_min": [0, 0, 2]}) |
| 107 | + expected.columns = MultiIndex.from_tuples([("val", "sum"), ("val", "min")]) |
| 108 | + tm.assert_frame_equal(result, expected) |
| 109 | + |
| 110 | + |
| 111 | +def test_transform_with_duplicate_columns(): |
| 112 | + df = DataFrame({"A": list("aaabbbccc"), "B": range(9, 18)}) |
| 113 | + result = df.groupby("A").transform( |
| 114 | + b_min=NamedAgg(column="B", aggfunc="min"), |
| 115 | + b_max=NamedAgg(column="B", aggfunc="max"), |
| 116 | + ) |
| 117 | + expected = DataFrame( |
| 118 | + { |
| 119 | + "b_min": [9, 9, 9, 12, 12, 12, 15, 15, 15], |
| 120 | + "b_max": [11, 11, 11, 14, 14, 14, 17, 17, 17], |
| 121 | + } |
| 122 | + ) |
| 123 | + tm.assert_frame_equal(result, expected) |
| 124 | + |
| 125 | + |
87 | 126 | def test_transform_fast():
|
88 | 127 | df = DataFrame(
|
89 | 128 | {
|
|
0 commit comments