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

Pandas如何无lambda向量化实现单列值分配到对应多列

向量化替代方案

逐行调用apply加lambda的写法本质是Python层的循环,数据量稍大就会很慢,完全可以用pandas/numpy的原生向量化操作实现,性能提升非常明显。

方法1:numpy索引直接赋值(性能最优)

核心思路是直接定位每个值要填充的行列坐标,批量写入,全程没有Python层逐行循环:

import numpy as np

# 提前拿到所有待填充列的列位置索引
col_pos = {col: i for i, col in enumerate(df.columns)}
target_col_pos = np.array([col_pos[ref] for ref in df['REF']])
row_pos = np.arange(len(df))

# 批量赋值
df.values[row_pos, target_col_pos] = df['Val3'].to_numpy()

方法2:独热编码转换(写法最简洁)

用get_dummies生成REF列的独热矩阵,再和Val3列做乘法,自动把值映射到对应列:

# 生成映射矩阵
fill_mat = pd.get_dummies(df['REF']).mul(df['Val3'], axis=0)
# 补全所有预设列,避免部分列无匹配值时缺失
fill_mat = fill_mat.reindex(columns=colList, fill_value=0)
# 写回原DataFrame
df[colList] = fill_mat

两种方法得到的结果和你原来逐行apply的输出完全一致。

性能参考:10万行规模的数据集下,原apply方案耗时约11~13s,上述两种向量化方案耗时均在10ms以内,性能差距可达千倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:33:29