首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫数据的有效计算

熊猫数据的有效计算
EN

Stack Overflow用户
提问于 2015-07-03 20:32:20
回答 1查看 304关注 0票数 5

我需要让我的代码更快。这个问题非常简单,但我没有找到一种好的方法来进行计算,而无需遍历整个DataFrame。

我有三个dataFrames: A,B和C。

A和B各有3列,格式如下:

A (10行):

代码语言:javascript
复制
     Canal Gerencia grad
0    'ABC'   'DEF'   23
etc...

B (25行):

代码语言:javascript
复制
     Marca  Formato  grad
0    'GHI'   'JKL'    43
etc...

另一方面,DataFrame C有5列:

C (5000行):

代码语言:javascript
复制
     Marca  Formato  Canal  Gerencia  grad
0    'GHI'   'JKL'    'ABC'   'DEF'   -102
etc...

我需要一个长度与DataFrame 'C‘相同的向量,它将三个表中的'grad’值相加,例如:

代码语言:javascript
复制
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,但速度太慢了。我知道我应该尽量避免通过dataFrame循环,但不知道如何做到这一点。我的实际代码如下(工作,但非常慢):

代码语言:javascript
复制
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]))

我真的很感激任何帮助使这个例行公事更快。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-03 20:40:54

IIUC,您需要将CA合并

代码语言:javascript
复制
C = pd.merge(C, A, on=['Canal', 'Gerencia'])

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

代码语言:javascript
复制
C = pd.merge(C, B, on=['Marca', 'Formato'])

(再次向C添加列)

此时,检查C中列的名称;假设它们是grad_foograd_bargrad_baz。所以把它们加进去

代码语言:javascript
复制
C.grad_foo + C.grad_bar + C.grad_baz
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31213870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档