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

将Pandas迭代从iterrows改为apply/向量化格式以优化性能

Pandas代码优化方案:替代iterrows实现分组填充逻辑

核心思路

利用Pandas内置的分组+向量化填充方法,替代逐行迭代的iterrows,彻底解决性能问题。逻辑完全匹配需求:按(ITEMSALE, ITEMID)分组,对rank=1的行,用同分组同列的下一个可用非空值填充空值,覆盖所有列。

优化代码实现

import pandas as pd

# 假设原数据集为df,包含ITEMSALE、ITEMID、rank及其他业务列
# 步骤1:分组后对每列执行向后填充,提取处理后的rank=1行
filled_rank1_rows = df.groupby(['ITEMSALE', 'ITEMID'], group_keys=False).apply(
    lambda group: group.bfill().loc[group['rank'] == 1]
)

# 步骤2:替换原数据中rank=1的行
df.loc[df['rank'] == 1, :] = filled_rank1_rows

代码说明

  1. groupby+bfill():bfill()是Pandas内置的向后填充方法,会自动为每个分组内的空值填充该列后续第一个非空值,全程为向量化操作,性能远高于Python循环。
  2. 提取rank=1行:分组处理后直接筛选rank=1的行,得到所有分组中已完成空值填充的目标行。
  3. 批量替换:通过布尔索引定位原数据中rank=1的行,批量替换为处理后的结果,避免逐行赋值的开销。

性能优势

iterrows本质是Python层面的逐行循环,数据量达到万级以上时会出现明显卡顿;而上述方案基于Pandas的C语言底层实现,处理速度可提升数十倍甚至上百倍,数据量越大优势越显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:27:20