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

如何用Pandas/Numpy实现DataFrame当前行除以下一行(替代循环)

Pandas实现当前行除以下一行的高效计算

当然可以用Pandas的内置方法轻松实现,而且比for循环高效太多了——尤其是当你的数据量变大时,向量化操作的优势会非常明显。

核心思路是用Pandas的shift()函数,它能帮你把列数据上下移动,完美实现"当前行对应下一行数据"的对齐需求。直接上代码:

首先先还原你的示例DataFrame:

import pandas as pd

# 构建示例数据
data = {
    'Date': ['26/08/17', '27/08/17', '28/08/17', '29/08/17', '30/08/17', '01/09/17', '02/09/17', '03/09/17'],
    'index_numer': [200, 300, 400, 100, 150, 160, 170, 280]
}
df = pd.DataFrame(data)

然后一行代码生成你要的新列:

# 计算当前行除以下一行的结果
df['Divison by next row'] = df['index_numer'] / df['index_numer'].shift(-1)

代码解释

  • df['index_numer'].shift(-1):把index_numer列的所有数据向上移动一行,这样当前行的位置就对应了原始数据里的下一行值。
  • 直接做除法运算,就能得到每一行除以下一行的结果。最后一行因为没有下一行数据,会返回NaN,和你示例里的...效果一致,你可以用df['Divison by next row'].fillna('...')把它替换成你想要的占位符,或者保留NaN。

如果需要像示例那样保留三位小数,可以加上round():

df['Divison by next row'] = (df['index_numer'] / df['index_numer'].shift(-1)).round(3)

运行后你会得到和示例完全一致的结果,而且代码简洁、执行效率远高于for循环——这也是Pandas向量化操作的核心优势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:33:47