Skip to content

Commit c223138

Browse files
docs: even more concise docstrings (#2068) (#2163)
1 parent 730f4b7 commit c223138

File tree

6 files changed

+252
-1185
lines changed

6 files changed

+252
-1185
lines changed

narwhals/group_by.py

Lines changed: 35 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)