因此,我昨天开始将一个函数应用于一个相当大的数据集(600万行),但它需要花费很长时间。我甚至试着用这种方法,但效果也不太好。无论如何,这是我使用的代码..。
def classifyForecast(dataframe):
buckets = len(dataframe[dataframe['QUANTITY'] != 0])
try:
adi = dataframe.shape[0] / buckets
cov = dataframe['QUANTITY'].std() / dataframe['QUANTITY'].mean()
if adi < 1.32:
if cov < .49:
dataframe['TYPE'] = 'Smooth'
else:
dataframe['TYPE'] = 'Erratic'
else:
if cov < .49:
dataframe['TYPE'] = 'Intermittent'
else:
dataframe['TYPE'] = 'Lumpy'
except:
dataframe['TYPE'] = 'Smooth'
try:
dataframe['ADI'] = adi
except:
dataframe['ADI'] = np.inf
try:
dataframe['COV'] = cov
except:
dataframe['COV'] = np.inf
return dataframe
from pandarallel import pandarallel
pandarallel.initialize()
def quick_classification(df):
return df.parallel_apply(classifyForecast(df))另外,请注意,我正在将数据分割成批处理。我不希望该函数在每一行上工作,而是希望它在块上工作。这样我就可以得到特定列的.mean()和.std()。
它不应该需要48小时才能完成。我该怎么加快速度?
发布于 2022-01-21 20:01:48
看起来mean和std是这里唯一的计算,所以我猜这是瓶颈。
你可以试着用numba加速它。
from numba import njit
import numpy as np
@njit(parallel=True)
def numba_mean(x):
return np.mean(x)
@njit(parallel=True)
def numba_std(x):
return np.std(x)
cov = numba_std(dataframe['QUANTITY'].values) / numba_mean(dataframe['QUANTITY'].values)https://stackoverflow.com/questions/70806902
复制相似问题