在聚合(极坐标)中使用条件表达式时如何避免警告

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

更新:聚合中的向量化规则现已最终确定。警告不再存在。


鉴于我有一个数据框

import polars as pl
df = pl.DataFrame({
    "group": [1, 1, 2, 2],
    "value": [10, None, 30, None],
})

我可以使用

fill_null
填充系列的空值并一步聚合:

df.groupby("group").agg(
    pl.col("value").fill_null(20).min()
)

我可以使用条件表达式执行相同的操作,然后也聚合该条件表达式:

df.with_columns(
    pl.when(pl.col("value").is_null()).then(pl.lit(20)).otherwise(pl.col("value"))
).groupby("group").agg(
    pl.col("value").min()
)

但是,在聚合期间动态创建系列会导致警告:

df.groupby("group").agg(
    pl.when(pl.col("value").is_null()).then(pl.lit(20)).otherwise(pl.col("value")).min()
)
# The predicate 'col("value").is_null()' in 'when->then->otherwise' is not a valid aggregation
# and might produce a different number of rows than the groupby operation would.
# This behavior is experimental and may be subject to change

警告似乎在这种情况下不适用,因为应用条件表达式相当于

fill_null
,不会导致警告。

使用条件表达式在聚合内转换系列时,我可以做些什么来消除警告吗?

python-polars
1个回答
0
投票

当您调用

agg
时,它会检查您尝试聚合的表达式是否有效。在某些情况下(抱歉,我没有反例),表达式作为聚合会产生意外结果,其形式为错误的行数。此警告试图引起您的注意。使用
pl.all
pl.any
无法解决问题。它只是回避或隐藏了您正在做的事情,使其不被检查到。在这个玩具示例中,您得到了预期的结果,但此警告试图告诉您不要指望这一点。如果您有更复杂的示例,您可能会发现得到的结果没有意义(在最好的情况下,因为您可以采取纠正措施)或在没有意识到的情况下得到错误的结果。

© www.soinside.com 2019 - 2024. All rights reserved.