Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何矢量化滚动和移位操作以提高性能_Python_Pandas_Numpy_Vectorization - Fatal编程技术网

Python 如何矢量化滚动和移位操作以提高性能

Python 如何矢量化滚动和移位操作以提高性能,python,pandas,numpy,vectorization,Python,Pandas,Numpy,Vectorization,使用Pandas 1.0和Numpy 1.18,我需要对包含大量组的大型数据帧应用多次滚动,并使用不同的窗口大小和摘要函数。在应用summary函数之前,序列也会移位1以放弃当前行值。这是滚动最大值移动1的示例: import pandas as pd import numpy as np df = pd.DataFrame({'a': [5,2,4,5,4,2,3,5,5,2,4,1], 'b': [18,37,60,45,40,40,50,10,30,2,46,19]}) df = df

使用Pandas 1.0和Numpy 1.18,我需要对包含大量组的大型数据帧应用多次滚动,并使用不同的窗口大小和摘要函数。在应用summary函数之前,序列也会移位1以放弃当前行值。这是滚动最大值移动1的示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [5,2,4,5,4,2,3,5,5,2,4,1], 'b': [18,37,60,45,40,40,50,10,30,2,46,19]})

df = df.sort_values('a').reset_index(drop=True)

df['max'] = df.groupby('a', sort=False, as_index=False)['b'].rolling(2, min_periods=1).apply(lambda x: np.max(x[:-1])).reset_index(drop=True)
结果:

df
    a   b   max
0   1  19   NaN
1   2  37   NaN
2   2  40  37.0
3   2   2  40.0
4   3  50   NaN
5   4  60   NaN
6   4  40  60.0
7   4  46  40.0
8   5  18   NaN
9   5  45  18.0
10  5  10  45.0
11  5  30  10.0

结果是正确的,但是一旦应用到一个大的数据帧,它会花费太长的时间,我想知道是否有一种方法可以重构这个逻辑,以利用矢量化,而不是依赖
应用
,正如我读到的,作为引擎盖下的一个循环实现,它的性能很差。

这看起来是一个不错的解决方案。如果你说“太长”是什么意思?大约一分钟。我有一些这样的滚动操作,对脚本的整体执行有15分钟的限制。我不是在抱怨Pandas groupby/apply函数的性能,我只是在尝试找到一个最优的解决方案,并在其他操作中发现矢量化显著减少了执行时间。我只是不知道如何通过矢量化重构滚动和移位操作,我正在寻求建议。这是否回答了你的问题?这看起来是一个不错的解决方案。如果你说“太长”是什么意思?大约一分钟。我有一些这样的滚动操作,对脚本的整体执行有15分钟的限制。我不是在抱怨Pandas groupby/apply函数的性能,我只是在尝试找到一个最优的解决方案,并在其他操作中发现矢量化显著减少了执行时间。我只是不知道如何通过矢量化重构滚动和移位操作,我正在寻求建议。这是否回答了你的问题?