python - 优化函数以在 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
解决方案
推荐阅读
- mysql - Keycloack - 通过外部用户存储 SPI 的密码重置更新凭据(无写访问权限!)
- java - 如何使用 spring-cloud-stream-binder-kafka-streams:3.1.1 中的功能方法检索/设置标头
- python - 为什么 Python Matplotlib savefig 在同一脚本中第二次调用时表现不同?
- swift - 为什么我的 .pushViewController 不能快速从 didSelectItemAt 工作
- python - 从具有不同摄像头 ID 的摄像头访问视频
- python - Python - 全局变量和类方法
- c++ - 新手问题:为什么最终结果会发生变化?
- laravel - 从 Laravel Blade 中的选择中获取选定的值
- ejs - EJS SyntaxError:意外的模板字符串
- sql - 查询出 XML 数据