![](/img/trans.png)
[英]How to execute a groupby and count fastly on Spark in Python?
[英]How to Parallize the function fastly in Python 3.7?
我有一个包含 200 个数据帧的列表,我正在尝试应用 function 但是。 我正在尝试在 python 中应用并行 function 以加快速度,但无法获得所需的结果。 下面是我的代码数据是 DataFrame 的列表,具有相同的列和行但不同的值
import pandas as pd
import multiprocessing as mp
def maxloc(data):
data['loc_max'] = np.zeros(len(data))
for i in range(1,len(data)-1):
if data['value'][i] >= data['value'][i-1] and data['value'][i] >= data['value'][i+1]:
data['loc_max'][i] = 1
return data
pool = mp.Pool(mp.cpu_count())
results = pool.map(maxloc, [row for row in data])
pool.close()
pool.join()
这是一个使用 scipy.signal.argrelextrema 的 maxloc 实现,并且速度要快得多(在此示例中超过 1000 倍):
import pandas as pd
from scipy.signal import argrelextrema
np.random.seed(42)
def maxloc(data):
data['loc_max'] = np.zeros(len(data))
for i in range(1,len(data)-1):
if data['value'][i] >= data['value'][i-1] and data['value'][i] >= data['value'][i+1]:
data['loc_max'][i] = 1
return data
def maxloc_faster(data):
loc_opt_ind = argrelextrema(df.value.to_numpy(), np.greater)
loc_max = np.zeros(len(data))
loc_max[loc_opt_ind] = 1
data['loc_max'] = loc_max
return data
让我们测试一下
values = np.random.rand(10000)
df = pd.DataFrame({'value': values})
np.all(maxloc_faster(df).loc_max == maxloc(df).loc_max)
# True
%timeit maxloc(df)
# 672 ms ± 39.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit maxloc_faster(df)
# 268 µs ± 12.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.