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

Pandas中apply配合lambda映射操作的更高效实现方法

Pandas数据映射性能优化方案

性能瓶颈原因

你当前使用apply(lambda s: s.map(mapper))的实现需要逐列遍历DataFrame,每次lambda调用、map操作都有额外的函数开销,在大循环、大数据量场景下耗时会被显著放大。

优化方案

方案1:矢量化replace实现(改动最小,性能提升3~10倍)

pandas内置的replace是全局矢量化操作,无需逐列遍历,直接完成整个DataFrame的值匹配替换,代码改动极小:

# 保留你原有其他逻辑,仅替换apply相关的行即可
payouts = pd.concat([payouts, ranking.replace(mapper).fillna(-1)], axis=1)

方案2:Numpy索引映射(性能最高,提升10~100倍,适合高频循环/超大数据量)

如果这段逻辑在循环中执行次数极多、或ranking数据量很大,可以用numpy索引实现完全零额外函数开销的映射,映射数组还可以提到循环外提前生成:

import numpy as np

# ---------- 这部分可以移到循环外,仅执行一次即可 ----------
max_rank = prizes['Rank'].max()
# 初始化映射数组,默认值为-1对应原逻辑的fillna结果
np_mapper = np.full(max_rank + 1, -1, dtype=int)
np_mapper[prizes['Rank'].values] = prizes['Payout'].values
# ------------------------------------------------------

# 一步完成所有值的映射
payout_arr = np_mapper[ranking.values]
# 转DataFrame后拼接
payouts = pd.concat([payouts, pd.DataFrame(payout_arr, columns=ranking.columns)], axis=1)

两种方案输出的结果和你原代码完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:54:00