我正在尝试过滤数据框以查找类别列中第一次出现的最大值。在我的数据中,不能保证有一个唯一的最大值,可能有多个值,但我只需要第一次出现。
但是我似乎找不到一种方法来限制过滤器的最大部分,目前我正在另一列上添加另一个过滤器,通常是基于时间的过滤器并取最小值。
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 列的引用。
我在这里遗漏了一些明显的东西吗?
如果没有示例输入和输出,很难说明,但总的来说,我建议的方法是:
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 │
└─────┴─────┴─────┘