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

Python Pandas计算相邻行滚动比率报错问题求解

问题复现

测试数据集构造代码:

import pandas as pd
data = pd.DataFrame([1.0,2.0,3.0,4.0,5.0],columns=['close'])

执行以下滚动计算代码时触发报错:

data.close.rolling(3, win_type='triang').divide()

错误提示:

'Window' object has no attribute 'divide'

预期计算结果为相邻两行的比值:2.0/1.0、3.0/2.0、4.0/3.0、5.0/4.0。

错误原因
  • pandas的Rolling滚动窗口对象本身没有divide()内置方法,直接调用必然报属性不存在的错误
  • 代码里设置的窗口大小为3、指定triang三角加权窗,和「相邻两行逐行计算比值」的需求完全不匹配,这类参数是为滚动加权聚合类计算设计的。
正确实现方法

你需要的是当前行数值除以前一行数值,窗口大小固定为2即可,有两种常用实现方式:

方法1:移位直接计算(性能最优)

不需要启动滚动窗口,直接将序列移位一位后做除法即可,代码最简洁运行最快:

# 计算相邻比值
data['adj_ratio'] = data.close / data.close.shift(1)

方法2:滚动窗口自定义计算

如果后续需要扩展更复杂的窗口计算逻辑,可以用rolling.apply自定义窗口内的运算规则,窗口大小设为2:

data['adj_ratio'] = data.close.rolling(2).apply(lambda window: window[-1] / window[0])

两种方法得到的计算结果完全一致,输出如下:

close  adj_ratio
0    1.0        NaN
1    2.0   2.000000
2    3.0   1.500000
3    4.0   1.333333
4    5.0   1.250000

第一行因为不存在前序相邻值,默认返回空值NaN,不需要空值的话在计算逻辑末尾追加.dropna()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:09:16