熊猫-如何计算两列的点积,每列包含相等长度的数组?

时间:2019-04-01 16:45:42

标签: python pandas

假设您有一个熊猫数据框,如下所示:

x = pd.DataFrame(data={
        'x1': [np.array([1,1,1]), np.array([1,2,6])],
        'x2': [np.array([2,3,2]), np.array([3,4,7])] })

我正在向此数据框添加新列,该列应包含x1x2的点积,即我的输出表应如下所示:

x1      | x2      | result
[1,1,1] | [1,2,6] | 9 (dot product of [1,1,1] and [1,2,6])
[2,3,2] | [3,4,7] | 32 (dot product of [2,3,2] and [3,4,7])

我该怎么做?

我尝试过

x.x1.dot(x.x2)

无论如何,它返回一个数组[5,11,44],即看起来是在“错误”的方向上计算点积。

谢谢!

4 个答案:

答案 0 :(得分:1)

我认为您可以在此处使用for循环

x['result']=[np.dot(x,y) for x, y  in zip(x.x1,x.x2)]

答案 1 :(得分:1)

您需要访问要点的行:x.x1[0].dot(x.x1[1])= 9

访问x.x1时,您将获得两行的熊猫系列。

@ Wen-Ben响应显示了如何在一行中获取“结果”列。

答案 2 :(得分:0)

无需使用dot()即可完成同样的操作。

x['product'] =df.apply(lambda k: sum(k['x1']*(k['x2'])), axis = 1)

答案 3 :(得分:0)

这可以通过在数组上重载点运算符来实现,而“点”的意思是“。”。

因此正确的陈述变为

product = x.x1.x.x2;

(注意:请确保在编辑器中关闭了椭圆,以进行更复杂的计算。)