Мне нужно сделать мой код быстрее. Проблема очень проста, но я не нахожу хороший способ сделать вычисление без цикла через весь DataFrame.Эффективный расчет на базе данных pandas
У меня три dataFrames: A, B и C.
А и В имеют 3 колонки каждый, и следующий формат:
A (10 строк):
Canal Gerencia grad
0 'ABC' 'DEF' 23
etc...
в (25 строк):
Marca Formato grad
0 'GHI' 'JKL' 43
etc...
DataFrame с, с другой стороны, имеет 5 колонок:
С (5000 строк):
Marca Formato Canal Gerencia grad
0 'GHI' 'JKL' 'ABC' 'DEF' -102
etc...
мне нужен вектор с той же длиной DataFrame «C», который добавляет до значения «град» из трех таблиц, например:
m = 'GHI'
f = 'JKL'
c = 'ABC'
g = 'DEF'
res = C['grad'][C['Marca']==m][C['Formato']==f][C['Canal']==c][C['Gerencia']==g] + A['grad'][A['Canal']==c][A['Gerencia']==g] + B['grad'][B['Formato']==f][B['Marca']==m]
>>-36
Я пробовал прокручивать C-файл данных, но слишком медленный. Я понимаю, что я должен попытаться избежать цикла через dataFrame, но не знаю, как это сделать. Мой фактический код следующий (работает, но очень медленно):
res=[]
for row_index, row in C.iterrows():
vec1 = A['Gerencia']==row['Gerencia']
vec2 = A['Canal']==row['Canal']
vec3 = B['Marca']==row['Marca']
vec4 = B['Formato']==row['Formato']
grad = row['grad']
res.append(grad + sum(A['grad'][vec1][vec2])+ sum(B['grad'][vec3][vec4]))
Я был бы очень признателен за любую помощь по изготовлению этой процедуры быстрее. Спасибо!
Спасибо! Это было именно то, что мне нужно! – learn2day