@@ -46,69 +46,32 @@ def agg(self: Self, *aggs: Expr | Iterable[Expr], **named_aggs: Expr) -> DataFra
4646 the grouped sum of another column.
4747
4848 >>> import pandas as pd
49- >>> import polars as pl
5049 >>> import narwhals as nw
51- >>> df_pd = pd.DataFrame(
52- ... {
53- ... "a": ["a", "b", "a", "b", "c"],
54- ... "b": [1, 2, 1, 3, 3],
55- ... "c": [5, 4, 3, 2, 1],
56- ... }
57- ... )
58- >>> df_pl = pl.DataFrame(
50+ >>> df_native = pd.DataFrame(
5951 ... {
6052 ... "a": ["a", "b", "a", "b", "c"],
6153 ... "b": [1, 2, 1, 3, 3],
6254 ... "c": [5, 4, 3, 2, 1],
6355 ... }
6456 ... )
65-
66- We define library agnostic functions:
67-
68- >>> @nw.narwhalify
69- ... def func(df):
70- ... return df.group_by("a").agg(nw.col("b").sum()).sort("a")
71-
72- >>> @nw.narwhalify
73- ... def func_mult_col(df):
74- ... return df.group_by("a", "b").agg(nw.sum("c")).sort("a", "b")
75-
76- We can then pass either pandas or Polars to `func` and `func_mult_col`:
77-
78- >>> func(df_pd)
79- a b
80- 0 a 2
81- 1 b 5
82- 2 c 3
83- >>> func(df_pl)
84- shape: (3, 2)
85- ┌─────┬─────┐
86- │ a ┆ b │
87- │ --- ┆ --- │
88- │ str ┆ i64 │
89- ╞═════╪═════╡
90- │ a ┆ 2 │
91- │ b ┆ 5 │
92- │ c ┆ 3 │
93- └─────┴─────┘
94- >>> func_mult_col(df_pd)
57+ >>> df = nw.from_native(df_native)
58+ >>>
59+ >>> df.group_by("a").agg(nw.col("b").sum()).sort("a")
60+ ┌──────────────────┐
61+ |Narwhals DataFrame|
62+ |------------------|
63+ | a b |
64+ | 0 a 2 |
65+ | 1 b 5 |
66+ | 2 c 3 |
67+ └──────────────────┘
68+ >>>
69+ >>> df.group_by("a", "b").agg(nw.col("c").sum()).sort("a", "b").to_native()
9570 a b c
9671 0 a 1 8
9772 1 b 2 4
9873 2 b 3 2
9974 3 c 3 1
100- >>> func_mult_col(df_pl)
101- shape: (4, 3)
102- ┌─────┬─────┬─────┐
103- │ a ┆ b ┆ c │
104- │ --- ┆ --- ┆ --- │
105- │ str ┆ i64 ┆ i64 │
106- ╞═════╪═════╪═════╡
107- │ a ┆ 1 ┆ 8 │
108- │ b ┆ 2 ┆ 4 │
109- │ b ┆ 3 ┆ 2 │
110- │ c ┆ 3 ┆ 1 │
111- └─────┴─────┴─────┘
11275 """
11376 flat_aggs = tuple (flatten (aggs ))
11477 if not all_exprs_are_scalar_like (* flat_aggs , ** named_aggs ):
@@ -162,29 +125,16 @@ def agg(self: Self, *aggs: Expr | Iterable[Expr], **named_aggs: Expr) -> LazyFra
162125 >>> import polars as pl
163126 >>> import narwhals as nw
164127 >>> from narwhals.typing import IntoFrameT
165- >>> lf_pl = pl.LazyFrame(
128+ >>> lf_native = pl.LazyFrame(
166129 ... {
167130 ... "a": ["a", "b", "a", "b", "c"],
168131 ... "b": [1, 2, 1, 3, 3],
169132 ... "c": [5, 4, 3, 2, 1],
170133 ... }
171134 ... )
172-
173- We define library agnostic functions:
174-
175- >>> def agnostic_func_one_col(lf_native: IntoFrameT) -> IntoFrameT:
176- ... lf = nw.from_native(lf_native)
177- ... return nw.to_native(lf.group_by("a").agg(nw.col("b").sum()).sort("a"))
178-
179- >>> def agnostic_func_mult_col(lf_native: IntoFrameT) -> IntoFrameT:
180- ... lf = nw.from_native(lf_native)
181- ... return nw.to_native(
182- ... lf.group_by("a", "b").agg(nw.sum("c")).sort("a", "b")
183- ... )
184-
185- We can then pass a lazy frame and materialise it with `collect`:
186-
187- >>> agnostic_func_one_col(lf_pl).collect()
135+ >>> lf = nw.from_native(lf_native)
136+ >>>
137+ >>> nw.to_native(lf.group_by("a").agg(nw.col("b").sum()).sort("a")).collect()
188138 shape: (3, 2)
189139 ┌─────┬─────┐
190140 │ a ┆ b │
@@ -195,18 +145,23 @@ def agg(self: Self, *aggs: Expr | Iterable[Expr], **named_aggs: Expr) -> LazyFra
195145 │ b ┆ 5 │
196146 │ c ┆ 3 │
197147 └─────┴─────┘
198- >>> agnostic_func_mult_col(lf_pl).collect()
199- shape: (4, 3)
200- ┌─────┬─────┬─────┐
201- │ a ┆ b ┆ c │
202- │ --- ┆ --- ┆ --- │
203- │ str ┆ i64 ┆ i64 │
204- ╞═════╪═════╪═════╡
205- │ a ┆ 1 ┆ 8 │
206- │ b ┆ 2 ┆ 4 │
207- │ b ┆ 3 ┆ 2 │
208- │ c ┆ 3 ┆ 1 │
209- └─────┴─────┴─────┘
148+ >>>
149+ >>> lf.group_by("a", "b").agg(nw.sum("c")).sort("a", "b").collect()
150+ ┌───────────────────┐
151+ |Narwhals DataFrame |
152+ |-------------------|
153+ |shape: (4, 3) |
154+ |┌─────┬─────┬─────┐|
155+ |│ a ┆ b ┆ c │|
156+ |│ --- ┆ --- ┆ --- │|
157+ |│ str ┆ i64 ┆ i64 │|
158+ |╞═════╪═════╪═════╡|
159+ |│ a ┆ 1 ┆ 8 │|
160+ |│ b ┆ 2 ┆ 4 │|
161+ |│ b ┆ 3 ┆ 2 │|
162+ |│ c ┆ 3 ┆ 1 │|
163+ |└─────┴─────┴─────┘|
164+ └───────────────────┘
210165 """
211166 flat_aggs = tuple (flatten (aggs ))
212167 if not all_exprs_are_scalar_like (* flat_aggs , ** named_aggs ):
0 commit comments