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

如何向量化加速Pandas iterrows?解决apply前序索引使用困惑

优化Pandas股票涨跌幅计算代码的方案

你现在用iterrows()逐行循环的方式效率极低,尤其是数据量大的时候,完全没必要这么做。Pandas提供了向量化操作的能力,用shift()函数就能轻松替代循环,速度提升几个量级都不是问题。

核心逻辑很简单:shift(n)会把Adj_Close列的数据整体向下移动n行,这样当前行的值除以shift(n)后的值,再减1,就是你要的n周期涨跌幅,全程不需要循环。

直接替换成下面的代码就行:

# 用向量化操作计算各周期涨跌幅
data['1_Day_%_Change'] = (data['Adj_Close'] / data['Adj_Close'].shift(1)) - 1
data['5_Day_%_Change'] = (data['Adj_Close'] / data['Adj_Close'].shift(5)) - 1
data['1_Month_%_Change'] = (data['Adj_Close'] / data['Adj_Close'].shift(21)) - 1
data['6_Month_%_Change'] = (data['Adj_Close'] / data['Adj_Close'].shift(151)) - 1
data['1_Year_%_Change'] = (data['Adj_Close'] / data['Adj_Close'].shift(252)) - 1

为什么这方法更快?

  • Pandas的向量化操作是底层基于C实现的,避开了Python循环的开销,数据量越大,对比iterrows()的速度差距越明显。
  • 原来的循环里每次都要做索引查找、at赋值,这些都是非常耗时的Python层面操作,现在一行代码搞定一个周期,简洁高效。
  • shift()会自动处理开头的行(比如第0行用shift(1)后会得到NaN),不需要你手动判断索引是否为0,后续可以根据需求用fillna()填充缺失值,或者直接保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:21:05