如何基于某列绝对值对Polars DataFrame进行升/降序排序?
按列的绝对值对Polars DataFrame排序
要实现按val列的绝对值排序,Polars可以通过sort()方法结合表达式生成的排序键完成,无需额外创建临时列。
升序排序(绝对值从小到大)
直接在sort()中传入pl.col("val").abs()作为排序依据:
df_sorted_asc = df.sort(pl.col("val").abs())
输出结果:
┌──────┬─────┬─────┐ │ name ┆ id ┆ val │ │ --- ┆ --- ┆ --- │ │ str ┆ str ┆ i32 │ ╞══════╪═════╪═════╡ │ two ┆ B ┆ 0 │ │ two ┆ C ┆ -3 │ │ one ┆ C ┆ -4 │ │ one ┆ B ┆ 4 │ │ two ┆ C ┆ -4 │ │ one ┆ A ┆ 9 │ └──────┴─────┴─────┘
降序排序(绝对值从大到小)
添加reverse=True参数即可实现降序:
df_sorted_desc = df.sort(pl.col("val").abs(), reverse=True)
输出结果:
┌──────┬─────┬─────┐ │ name ┆ id ┆ val │ │ --- ┆ --- ┆ --- │ │ str ┆ str ┆ i32 │ ╞══════╪═════╪═════╡ │ one ┆ A ┆ 9 │ │ one ┆ C ┆ -4 │ │ one ┆ B ┆ 4 │ │ two ┆ C ┆ -4 │ │ two ┆ C ┆ -3 │ │ two ┆ B ┆ 0 │ └──────┴─────┴─────┘
补充:分组后按绝对值排序
如果需要分组后再按绝对值排序,可以结合group_by()和sort():
df_group_sorted = df.group_by("name", maintain_order=True).sort(pl.col("val").abs())
输出结果:
┌──────┬─────┬─────┐ │ name ┆ id ┆ val │ │ --- ┆ --- ┆ --- │ │ str ┆ str ┆ i32 │ ╞══════╪═════╪═════╡ │ one ┆ C ┆ -4 │ │ one ┆ B ┆ 4 │ │ one ┆ A ┆ 9 │ │ two ┆ B ┆ 0 │ │ two ┆ C ┆ -3 │ │ two ┆ C ┆ -4 │ └──────┴─────┴─────┘
内容的提问来源于stack exchange,提问作者beta green
相关产品推荐
相关产品推荐

