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

除iloc外,按条件为DataFrame赋值列的更快方法(可使用Dask)

更快的DataFrame条件列赋值方法(含Dask实现)

针对你需要的「当feature列值为0时,将package_loss列设为1」的需求,除了iloc,以下几种方法在性能上更优,包括Pandas原生的向量化方案和Dask的大数据并行方案:

Pandas 原生优化方案

1. 使用numpy.where向量化赋值

numpy的向量化操作跳过了loc的索引查找开销,在大数据集上速度显著更快:

import numpy as np

df2['package_loss'] = np.where(df2['feature'] == 0, 1, df2['package_loss'])

该方法直接对整列进行批量判断,将满足条件的位置替换为1,其余保留原值。

2. 使用DataFrame.mask方法

mask方法专门用于将满足条件的元素替换为指定值,同样是向量化实现,性能优于loc:

df2['package_loss'] = df2['package_loss'].mask(df2['feature'] == 0, 1)

Dask 大数据并行方案

如果你的数据量超出内存上限,Dask的并行处理能大幅提升效率,实现方式和Pandas类似,但支持分布式计算:

import dask.dataframe as dd

# 将Pandas DataFrame转为Dask DataFrame,分区数根据数据规模调整
ddf = dd.from_pandas(df2, npartitions=4)

# 方法1:使用Dask的where实现条件赋值
ddf['package_loss'] = dd.where(ddf['feature'] == 0, 1, ddf['package_loss'])

# 方法2:使用mask方法
ddf['package_loss'] = ddf['package_loss'].mask(ddf['feature'] == 0, 1)

# Dask是懒执行模型,需调用compute()获取最终结果
df_result = ddf.compute()

Dask会将任务拆分到多个分区并行处理,适合TB级别的大数据场景,相比单进程Pandas能获得数倍速度提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:06:29