You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dask中对target列二值化条件赋值失败求助

解决Dask DataFrame二值化条件赋值的问题

嘿,我一眼就看出问题出在哪啦!你用的where方法逻辑搞反了——Dask(和Pandas)里的where是满足条件时保留原数据,不满足时才替换成你指定的值。你写的代码:

result = mock_dask.target.where(mock_dask.target > 0, 1)

意思是:当target > 0时保留原数值(比如3、4这些),当target <= 0时替换成1——这正好和你想要的“大于0设为1,其余设为0”完全相反,难怪结果不对!

下面给你几种正确的实现方式,按简洁度排序:

方法1:布尔值直接转整数(最简洁)

因为mock_dask.target > 0会生成一个布尔类型的Dask Series,而布尔值True转整数是1,False转整数是0,完美匹配你的需求:

result = (mock_dask.target > 0).astype(int)

方法2:修正where的逻辑

把条件和替换值反过来,让target <= 0时保留原0值,target > 0时替换成1:

result = mock_dask.target.where(mock_dask.target <= 0, 1)

方法3:用np.where实现直观的条件映射

如果你更习惯“满足条件返回A,否则返回B”的逻辑,可以用numpy.where结合map_partitions(Dask支持这种分区级别的操作):

import numpy as np
result = mock_dask.target.map_partitions(lambda s: np.where(s > 0, 1, 0))

验证结果

执行result.compute()后,你会得到符合预期的二值化结果:

0     1
1     0
2     1
3     1
4     0
5     0
6     0
7     1
8     0
9     0
10    0
11    1
12    1
Name: target, dtype: int64

内容的提问来源于stack exchange,提问作者NuValue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:35:04