根据 Polars 中的条件添加列

Not*_*ame 4 python dataframe python-polars

假设我有一个像这样的 Polars 数据框:

df = pl.DataFrame({
    'a': [0.3, 0.7, 0.5, 0.1, 0.9]
})
Run Code Online (Sandbox Code Playgroud)

现在我需要添加一个新列,根据列中的值'a'大于还是小于某个阈值来分配 1 或 0。在 Pandas 中我可以这样做:

import numpy as np

THRESHOLD = 0.5
df['new'] = np.where(df.a > THRESHOLD, 0, 1)
Run Code Online (Sandbox Code Playgroud)

我也可以在 Polars 中做一些非常类似的事情:

df = df.with_columns(
    pl.lit(np.where(df.select('a').to_numpy() > THRESHOLD, 0, 1).ravel())
    .alias('new')
)
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我确信在这里使用 NumPy 不是最佳实践。

我也尝试过类似的东西:

df = df.with_columns(
    pl.lit(df.filter(pl.col('a') > THRESHOLD).select([0, 1]))
    .alias('new')
)
Run Code Online (Sandbox Code Playgroud)

但使用这种语法我不断遇到以下错误:

DuplicateError                            Traceback (most recent call last)
Cell In[47], line 5
      1 THRESHOLD = 0.5
      2 DELAY_TOLERANCE = 10
      4 df = df.with_columns(
----> 5     pl.lit(df.filter(pl.col('a') > THRESHOLD).select([0, 1]))
      6     .alias('new')
      7 )
      8 df.head()

DuplicateError: column with name 'literal' has more than one occurrences
Run Code Online (Sandbox Code Playgroud)

所以我的问题有两个:我在这里做错了什么以及Polars中对于此类条件作业的最佳实践是什么?

我确实查看了文档和之前的问题,但找不到任何与我的用例类似的内容。

Way*_*shi 5

就极地而言,这select([0, 1])并没有多大意义,您只是选择一个文字。不太确定为什么会按原样抛出 DuplicateError 。

极地条件最好用以下方法完成when

df.with_columns(pl.when(pl.col("a") > 0.5).then(0).otherwise(1).alias("b"))