首页 > 解决方案 > 优化函数以在 pandas 的 4 个标准差内找到滚动窗口中的最大值和最小值

问题描述

首先,我是熊猫的新手,所以我正在努力解决这个问题。

我试图通过熊猫数据框在与平均值相差 4 个标准差的范围内找到滚动窗口中的最高值,但我觉得我这样做的效率非常低。

我目前拥有的功能是:

def running_ab_extreme_max(df):
    mean = df.mean()
    std = df.std()
    if df.max() > mean + 4 * std:
        df[df <= mean + 4 * std]
    extreme = df.max()
    return extreme

对于最低值 != 0 我使用这个函数:

def running_ab_extreme_min(df):
    df[df != 0]
    mean = df.mean()
    std = df.std()
    if df.min < mean - 4 * std:
        df[df >= mean - 4 * std]
    extreme = df.min()

    return extreme

我这样称呼他们:

df["ab_high_month"] = df["highest"].rolling(month).apply(running_ab_extreme_max)
df["ab_low_month"] = df["lowest"].rolling(month).apply(running_ab_extreme_min)

但是他们需要很长时间来评估,所以我想知道我是否在这里做一些愚蠢的事情,并且希望对此有所了解

编辑:我将功能更改为 this 并使其更快,但我不确定为什么:

def running_ab_extreme_max(df):
    temp_moving_list = df.tolist()
    std = np.std(temp_moving_list)
    mean = np.mean(temp_moving_list)
    extreme = max(temp_moving_list)
    i = -2
    if extreme > mean + (4 * std):
        high_sorted = temp_moving_list
        high_sorted.sort()
        while extreme > mean + (4 * std):
            extreme = high_sorted[i]
        i = i - 1
    return extreme

标签: pythonpandas

解决方案


推荐阅读