Devo rendere il mio codice più veloce. Il problema è molto semplice, ma non sto trovando un buon modo per effettuare il calcolo senza eseguire il loop dell'intero DataFrame.Calcolo efficiente su un dataframe panda
Ho tre dataFrames: A, B e C.
A e B hanno 3 colonne ciascuno, e il seguente formato:
A (10 righe):
Canal Gerencia grad
0 'ABC' 'DEF' 23
etc...
B (25 righe):
Marca Formato grad
0 'GHI' 'JKL' 43
etc...
dataframe C, d'altra parte, ha 5 colonne:
C (5000 righe):
Marca Formato Canal Gerencia grad
0 'GHI' 'JKL' 'ABC' 'DEF' -102
etc...
ho bisogno di un vettore con la stessa lunghezza di dataframe 'C' che somma i valori di 'grad' dalle tre tabelle, ad esempio:
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
Ho tentato di eseguire il looping del C dataFrame, ma è troppo lento. Capisco che dovrei cercare di evitare il ciclo attraverso il dataFrame, ma non so come farlo. Il mio codice attuale è la seguente (opere, ma molto lento):
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]))
Vorrei davvero apprezzare alcun aiuto a fare questa routine più veloce. Grazie!
Grazie! Era esattamente ciò di cui avevo bisogno! – learn2day