Мне нужно рассчитать процентиль для столбца pandas кадра данных. Подмножество кадра данных выглядит следующим образом:
Я хочу вычислить 20-й процентиль SaleQTY, но для каждой группы ["Штрих-код" , "ShopCode"]: поэтому я определяю функцию, как показано ниже:
def quant(group):
group["Quantile"] = np.quantile(group["SaleQTY"], 0.2)
return group
И применяю эту функцию к каждой группе моих данных о продажах, которые имеют почти 18 миллионов строк и примерно 3 миллиона групп ["Штрих-кода" , "ShopCode"]:
quant_sale = sales.groupby(['Barcode','ShopCode']).apply(quant)
Это заняло 2 часа на сервере windows с 128 ГБ оперативной памяти и 32 ядрами. Это не имеет смысла, потому что это одна маленькая часть моего кода. Итак, я начинаю поиск net для повышения производительности. Я придумал решение "numba" с приведенным ниже кодом, который не работал:
from numba import njit, jit
@jit(nopython=True)
def quant_numba(df):
final_quant = []
for bar_shop,group in df.groupby(['Barcode','ShopCode']):
group["Quantile"] = np.quantile(group["SaleQTY"], 0.2)
final_quant.append((bar_shop,group["Quantile"]))
return final_quant
result = quant_numba(sales)
Кажется, я не могу использовать pandas объекты в этом декораторе.
Я не уверен, смогу ли я использовать многопроцессорную обработку (которая мне незнакома со всей концепцией) или есть какое-либо решение для ускорения моего кода. Так что любая помощь будет оценена.