Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧上的高效计算_Python_Pandas - Fatal编程技术网

Python 数据帧上的高效计算

Python 数据帧上的高效计算,python,pandas,Python,Pandas,我需要让我的代码更快。这个问题很简单,但是我没有找到一个好的方法来进行计算而不循环整个数据帧 我有三个数据帧:A、B和C A和B各有3列,格式如下: A(10行): B(25行): 另一方面,数据帧C有5列: C(5000行): 我需要一个数据帧'C'长度相同的向量,它将三个表中的'grad'值相加,例如: m = 'GHI' f = 'JKL' c = 'ABC' g = 'DEF' res = C['grad'][C['Marca']==m][C['Formato']==f][C['Cana

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

我有三个数据帧:A、B和C

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

A(10行):

B(25行):

另一方面,数据帧C有5列:

C(5000行):

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


我真的很感激任何能让这个程序更快的帮助。谢谢大家!

IIUC,您需要将
C
A
合并:

C = pd.merge(C, A, on=['Canal', 'Gerencia'])
(这将向其中添加一列),然后将结果与
B
合并:

C = pd.merge(C, B, on=['Marca', 'Formato'])
(再次向
C
添加列)

此时,检查
C
中的列名称;说它们是
grad_foo
grad_bar
grad_baz
。所以只要加上它们就行了

C.grad_foo + C.grad_bar + C.grad_baz

非常感谢。这正是我所需要的!
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]))
C = pd.merge(C, A, on=['Canal', 'Gerencia'])
C = pd.merge(C, B, on=['Marca', 'Formato'])
C.grad_foo + C.grad_bar + C.grad_baz