multi-key argsort in polars

huangapple go评论96阅读模式
英文:

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   
└─────┴─────┘

huangapple
  • 本文由 发表于 2023年8月9日 01:15:30
  • 转载请务必保留本文链接:https://go.coder-hub.com/76861844.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定