英文:
multi-key argsort in polars
问题
说我有
df = pl.DataFrame({'a': [1, 1, 2, 1], 'b': [2, 1, 3, 3]})
我想找到一个表达式 indices,使得 df.sort(indices)
的结果与 df.sort(by=['a', 'b'])
相同。
110% 的 hacky 解决方案:
pl.from_pandas(df.to_pandas().sort_values(['a', 'b']).index.to_series())
英文:
say I have
df = pl.DataFrame({'a': [1, 1, 2, 1], 'b': [2, 1, 3, 3]})
I'd like to find an Expr indices such that
df.sort(indices)
would give the same result as df.sort(by=['a', 'b'])
110% hacky solution:
pl.from_pandas(df.to_pandas().sort_values(['a', 'b']).index.to_series())
答案1
得分: 1
来自 Polars Discord 的解决方案(感谢 orlp!)
>>> df.sort(df.select(pl.arg_sort_by(pl.col('a'), pl.col('b'))))
shape: (4, 2)
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 1 │
│ 1 ┆ 2 │
│ 1 ┆ 3 │
│ 2 ┆ 3 │
└─────┴─────┘
>>> df.sort(by=['a', 'b'])
shape: (4, 2)
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 1 │
│ 1 ┆ 2 │
│ 1 ┆ 3 │
│ 2 ┆ 3 │
└─────┴─────┘
英文:
Solution from the Polars Discord (thanks orlp!)
>>> df.sort(df.select(pl.arg_sort_by(pl.col('a'), pl.col('b'))))
shape: (4, 2)
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 1 │
│ 1 ┆ 2 │
│ 1 ┆ 3 │
│ 2 ┆ 3 │
└─────┴─────┘
>>> df.sort(by=['a', 'b'])
shape: (4, 2)
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 1 │
│ 1 ┆ 2 │
│ 1 ┆ 3 │
│ 2 ┆ 3 │
└─────┴─────┘
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论