如何计算pandas最近5个周期的滚动斜率和滚动R平方值?

问题描述 投票:0回答:1

我的 Excel 工作表中有 2 列。第一个是 SL No,即序列号,第二个是“关闭”列。 在Excel中,我可以使用斜率函数快速计算斜率,然后将其向下拖动(滚动) 同样,我还使用 RSQ 函数计算了 R 平方值。我想在熊猫身上做同样的事情。 如何计算这两列的滚动斜率和 r 平方值(序列号和收盘价) 这是数据-

数据={ "SL 号": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], “收盘”: [46.20, 49.90, 51.85, 54.00, 57.70, 56.60, 52.95, 55.35, 57.20, 58.05, 56.65], “Ln”:[3.83、3.91、3.95、3.99、4.06、4.04、3.97、4.01、4.05、4.06、4.04] }

enter image description here

以上是通过excel想要的计算 enter image description here 以上包含 Excel 中用于导出列的公式。

这是我尝试过的一些代码

def calculate_slope(x, y):
    """Calculate the slope using the last 5 values."""
    if len(x) < 5:
        return np.nan  # Not enough data to compute slope
    slope = np.polyfit(x, y, 1)[0]  # Linear fit (degree 1)
    return slope

df['rolling_slope'] = df['close'].rolling(window=5).apply(lambda x: calculate_slope(df['sno'].iloc[x.index], x), raw=False)

上面的代码给出的输出与 Excel 版本不同

pandas statistics
1个回答
0
投票

回答

在您的示例中,指数函数显然是基于

Ln column
(Excel 中的 C)应用的,但您在 Python 中应用的函数是基于
close
列滚动的。

# apply rolling to df['Ln'] instead of df['close']
df['rolling_slope'] = df['Ln'].rolling(window=5).apply(lambda x: calculate_slope(df['sno'].iloc[x.index], x), raw=False)

顺便说一句,我认为这个问题如果您仔细检查了代码,就可以轻松解决。不检查代码是一回事,但您的问题似乎也是在没有检查小错误的情况下编写的:你提供的数据(dict)的关键显然是

SL no
,但是你用于滚动+应用的代码是
df['sno']
,关闭列不同(关闭或关闭),在excel图的第5行,SL no 应该得到斜率,但它没有,等等。很多小错误。这个问题解释得很差,并且有太多小错误,任何人都无法回答,我认为你应该养成检查自己是否有小错误的习惯,以改进你的编码。

© www.soinside.com 2019 - 2024. All rights reserved.