Мне нужно векторизовать функции, манипулирующие панорамирования данных или сериями, чтобы уменьшить время обработки.
Проблема в том, что некоторые параметры векторизованной функции не должны быть векторизованы.
Давайте посмотрим Пример со следующим кодом. Я создаю серию, которая будет обрабатываться как вектор.
Values = pd.DataFrame(np.random.uniform(0, 1, size=(3, 1)), columns=['V'], index = ['mean', 'std', 'delta'])
Values
V
mean 0.885185
std 0.262265
delta 0.790134
Затем у меня есть модель, она связана со значениями столбцами 'cpt', но совсем не имеет той же формы .
Model = pd.DataFrame([['JAVA','mean',10],['Python','std',5],['JS','sqrt',6],['JAVA','dif',3]],
columns = ['Language', 'cpt' , 'Id'])
Model
Language cpt Id
0 JAVA mean 10
1 Python std 5
2 JS sqrt 6
3 JAVA dif 3
Мне нужно найти Id, соответствующий в модели cpt для каждого значения. Я пишу функцию так, как будто я могу векторизовать ее.
def findId(Values, Model):
return (Model[Model.cpt == Values].Id.values)
Выход функции будет
ValueError: Lengths must match to compare
, поскольку параметр Model также векторизован.
Как я могу сделать, чтобы передать параметр 'Model' в функцию и что он не будет считаться параметром того же размера?
Я мог бы написать al oop как этот, но это первоначальная проблема I ' Я пытаюсь решить:
def loopfindId(Values, Model):
ScaleNbrs = []
for i in range (len(Values)):
ScaleNbrs.append(findId(Values.index[i], Model))
return ScaleNbrs
loopfindId(Values, Model)
[array([10], dtype=int64), array([5], dtype=int64), array([], dtype=int64)]
Однако, даже если я получаю почти желаемый результат, он очень медленный, потому что мне приходится многократно обрабатывать этот алгоритм в алгоритме, и он должен обрабатывать это миллион раз.
Я не уверен на 100% в желаемых результатах этого шага, но после получения идентификатора для каждого значения мне придется проверить, находится ли значение в строке таблицы, в зависимости от на Id. DataFrame Id будет выглядеть следующим образом:
Scale = pd.DataFrame([['LevelA', 0, 0.3, 10],['LevelB', 0.3, 1, 10],
['LevelA', 0, 0.2, 3],['LevelB', 0.2, 0.6, 3],['LevelC', 0.6, 1, 3]],
columns = ['Level', 'lowerBound', 'upperBound', 'Id'])
Level lowerBound upperBound Id
0 LevelA 0.0 0.3 10
1 LevelB 0.3 1.0 10
2 LevelA 0.0 0.2 3
3 LevelB 0.2 0.6 3
4 LevelC 0.6 1.0 3
Затем мне нужно знать, на каком уровне находится Значение, а также другую информацию о строке и ее положении соответственно другим доступным уровням. В масштабе данных. Вот почему я хотел бы представить DataFrame в качестве параметра функции, но у него может быть лучший способ сделать это.