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中对于此类条件作业的最佳实践是什么?
我确实查看了文档和之前的问题,但找不到任何与我的用例类似的内容。
| 归档时间: |
|
| 查看次数: |
2272 次 |
| 最近记录: |