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