Основная проблема заключается в том, что вы вызываете эту функцию для кусков 5 строк, лучшая производительность должна быть для кусков 1k, 10k строк.
Функция DataFrame.assign
немного медленнее, но основная проблемадолжно быть в ваших пользовательских функциях diffcheck
, q_v_plaus
, v_occ_plaus
- я думаю, не векторизовано (если это возможно, или нет, это невозможно, если вы не видите его).
Немного быстрее это удалить assign
и сравните на .values
для замены Series
на 1d numpy array
:
def qualitycheck(data, qparams, qid):
data['parameter_set'] = qid
data['volume_below_max'] = data["volume"].values < int(qparams["max_volume"])
...
...
Я стараюсь оптимизировать ваши функции:
def diffcheck(column):
if column.values.sum() == 0:
return True
val0 = column.iat[0]
check = val0 == column
return check.values.sum() < len(check)
Функция применяется ко всем строкам, а не толькодля первых 5:
def q_v_plaus1(qs,vs):
qs = qs.values
vs= vs.values
m1 = (qs== 0) & (vs > 0)
m2 = (qs> 0) & (vs == 0)
return ~(m1 | m2)
переписывается на более быструю альтернативу:
def q_v_plaus1(qs,vs):
qs = qs.values
vs= vs.values
m1 = (qs!= 0) | (vs <= 0)
m2 = (qs<= 0) | (vs != 0)
return m1 & m2