数据帧的高效计算

2024-06-17 13:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要让我的代码更快。这个问题很简单,但是我没有找到一个好的方法来进行计算而不遍历整个数据帧。你知道吗

我有三个数据帧: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'长度相同的向量,将三个表中的'grad'值相加,例如:

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数据帧中循环,但是太慢了。我知道我应该尽量避免循环通过数据帧,但不知道如何做到这一点。我的实际代码如下(工作正常,但速度很慢):

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]))

我真的很感谢任何帮助,使这个例行更快。谢谢您!你知道吗


Tags: 数据代码defetcresjklrowabc
1条回答
网友
1楼 · 发布于 2024-06-17 13:16:20

IIUC,您需要将CA合并:

C = pd.merge(C, A, on=['Canal', 'Gerencia'])

(这将向其中添加一列),然后将结果与B合并:

C = pd.merge(C, B, on=['Marca', 'Formato'])

(再次向C添加列)

此时,检查C中列的名称;假设它们是grad_foograd_bargrad_baz。所以只要加上它们就行了

C.grad_foo + C.grad_bar + C.grad_baz

相关问题 更多 >