5
我需要更快地完成我的代碼。問題很簡單,但我沒有找到一個好的方法來進行計算,而無需循環整個DataFrame。對熊貓數據幀的高效計算
我有三個dataFrames:A,B和C.
A和B具有每個3列和格式如下:
A(10行):
Canal Gerencia grad
0 'ABC' 'DEF' 23
etc...
B(25行):
Marca Formato grad
0 'GHI' 'JKL' 43
etc...
數據幀C,在另一方面,有5列:
C(5000行):
Marca Formato Canal Gerencia grad
0 'GHI' 'JKL' 'ABC' 'DEF' -102
etc...
我需要與數據幀「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