но тогда я получаю только этот столбец. Как мне сохранить значение строки «baz»? Любые дополнительные записи в .agg([]) не зависят от нового pl.col("bar").sort().
Учитывая следующий кадр данных, я хотел бы сгруппировать по «foo», отсортировать по «bar», а затем сохранить всю строку. [code]df = pl.DataFrame( { "foo": [1, 1, 1, 2, 2, 2, 3], "bar": [5, 7, 6, 4, 2, 3, 1], "baz": [1, 2, 3, 4, 5, 6, 7], } )
df_desired = pl.DataFrame({"foo": [1, 2, 3], "bar": [5, 2, 1], "baz": [1,5,7]}) [/code] [code]>>> df_desired shape: (3, 3) ┌─────┬─────┬─────┐ │ foo ┆ bar ┆ baz │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ i64 │ ╞═════╪═════╪═════╡ │ 1 ┆ 5 ┆ 1 │ │ 2 ┆ 2 ┆ 5 │ │ 3 ┆ 1 ┆ 7 │ └─────┴─────┴─────┘ [/code] Я могу сделать это, отсортировав заранее, но это затратно по сравнению с сортировкой группы: [code]df_solution = df.sort("bar").group_by("foo", maintain_order=True).first().sort(by="foo")
assert df_desired.equals(df_solution) [/code] Я могу сортировать по "foo" в агрегировании, как в этом ответе SO: [code]>>> df.group_by("foo").agg(pl.col("bar").sort().first()).sort(by="foo") shape: (3, 2) ┌─────┬─────┐ │ foo ┆ bar │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═════╪═════╡ │ 1 ┆ 5 │ │ 2 ┆ 2 │ │ 3 ┆ 1 │ └─────┴─────┘ [/code] но тогда я получаю только этот столбец. Как мне сохранить значение строки «baz»? Любые дополнительные записи в .agg([]) не зависят от нового pl.col("bar").sort().