如果您只是想更快地执行此操作,而不是专门使用cython,那么我将以纯numpy的方式执行(大约快50倍)。
def numpy_foo(arr):
vals = {i: (arr[i, :] + arr[i:, :]).sum(axis=1).tolist()
for i in range(arr.shape[0])}
return vals
%timeit foo(df)
100 loops, best of 3: 7.2 ms per loop
%timeit numpy_foo(df.values)
10000 loops, best of 3: 144 µs per loop
foo(df) == numpy_foo(df.values)
Out[586]: True
一般而言,与numpy相比,大熊猫为您提供了许多便利,但存在间接费用。因此,在熊猫没有真正添加任何东西的情况下,通常可以通过以numpy的方式来加快速度。再举一个例子,请看我问的这个问题,它显示出大致可比的速度差异(大约23倍)。