加快从python滚动窗口中找到前5个数字的平均值的速度

sl

我想从30的滚动窗口中创建5个最大值的平均值的列。对于大型DataFrame,使用for循环非常慢。我尝试将rolling()与nlargest()结合使用,但无法正常工作。有什么建议可以加快速度吗?

def top_values(df, column, days):
    top5 = df.nlargest(days, column)
    top = top5[column].sum() / days

x = 0
w = 0
for i in df.index:
    if x > 30:
        df['tops'][x] = top_values(df[w:x], 'column', 5)
        w += 1
        x += 1

一种方法是在您的中使用lambda函数,rolling例如获取已排序列表的前5个元素的平均值:

df['column'].rolling(30).apply(lambda x: np.mean(sorted(x,reverse=True)[:5]))

最小的例子

在15个元素的数据帧上,我们可以在5个窗口中获得前3个值的平均值,以演示:

>>> df
    column
0       48
1        9
2       36
3       71
4       59
5       16
6        9
7       18
8       43
9        3
10      54
11      23
12      12
13      38
14      54

>>> df['column'].rolling(5).apply(lambda x: np.mean(sorted(x,reverse=True)[:3]))
0           NaN
1           NaN
2           NaN
3           NaN
4     59.333333
5     55.333333
6     55.333333
7     49.333333
8     40.000000
9     25.666667
10    38.333333
11    40.000000
12    40.000000
13    38.333333
14    48.666667
Name: column, dtype: float64

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在列表中找到某个数字的平均值 [python]

如何使用JAVA在输入和输出对话框中找到三个数字的平均值?

Python 3个数字的平均值计算

如何在 1 列中找到这两个数字之间的平均值?

获取每个文件中找到的数字的平均值到两个小数位

是否有任何命令可以在 MATLAB 中的向量中找到前 5 个值的平均值,然后是接下来的 5 个值,总共 1000 个值

如何找到环绕的两个数字的平均值?

如何在Python中找到具有两个元素的数组的平均值?

在Python中找到随机列表的浮动平均值

从列表python中找到最大平均值

使用python在一个数据框中按类别滚动平均值

查找最高的三个数字的平均值

三个数字的平均值

PHP在50个随机数的列表中找到10个后续数字的最大平均值

从数组中找到平均值

在 Python 3 中计算 n 个数字的平均值

随窗口增加的滚动平均值

我想在给定的数组中找到平均值,并在 java 中找到最接近该平均值的数字

如何加快/改善滚动平均值功能?

如何在二维数组中找到数字的平均值

如何在 3 列中找到最好的 2 个以及这 2 个的平均值

在C中仅使用While和do while循环查找5个数字和N个数字的平均值

在SQL中找到与每个组相对应的第N个值和平均值

在JavaScript中找到两个杠杆数组对象的平均值

如何在Objective-C中找到数组中10个值的平均值

使用 Java stream() 在 Arrays.asList 中找到 2 个元素的平均值

如何获取数组中前两个数字的平均值?

如何在Python中的列表中找到出现的平均值

如何在Python中的dict中找到值数组的平均值?