如何在使用 over 时按第一个最大值过滤极坐标数据帧?

问题描述 投票:0回答:1

我正在尝试过滤数据框以查找类别列中第一次出现的最大值。在我的数据中,不能保证有一个唯一的最大值,可能有多个值,但我只需要第一次出现。

但是我似乎找不到一种方法来限制过滤器的最大部分,目前我正在另一列上添加另一个过滤器,通常是基于时间的过滤器并取最小值。

df
.filter(pl.col(max_column) == pl.col(max_column).max().over(category_column))
.filter(pl.col(min_column) == pl.col(min_column).min().over(category_column))

但是,我更愿意简化上述内容,只需要传入对 max 和category 列的引用。

我在这里遗漏了一些明显的东西吗?

python python-polars
1个回答
0
投票

如果没有示例输入和输出,很难说明,但总的来说,我建议的方法是:

  • group_by()
    先按类别列
  • sort_by()
    按列分组希望从+附加列中获得最大值,这些列需要最终出现在您想要的行上
  • 采取
    last()
    行:
df = pl.DataFrame({
    "a": [1,2,3,4],
    "b": [1,2,4,4],
    "c": ['c','b','b','b']
})

(
    df
    .group_by('c')
    .agg(
        pl.all()
        .sort_by('b','a', descending=[False, True])
        .last()
    )
)

┌─────┬─────┬─────┐
│ c   ┆ a   ┆ b   │
│ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ b   ┆ 3   ┆ 4   │
│ c   ┆ 1   ┆ 1   │
└─────┴─────┴─────┘
© www.soinside.com 2019 - 2024. All rights reserved.