获取带有向量的数据帧的点积,并在Pandas中返回数据帧

Ame*_*ina 8 python dataframe dot-product pandas

我无法dot() 在官方文档中找到该方法的条目.然而,方法就在那里,我可以使用它.为什么是这样?

在这个主题上,有没有办法计算数据框中每一行与另一个向量的元素乘法?(并获得一个dataframe背面?),即类似dot()但不是计算点积,人们计算元素产品.

Ada*_*hes 10

mul本质上是一种外在产品,而dot内在产品.让我扩展接受的答案:

In [13]: df = pd.DataFrame({'A': [1., 1., 1., 2., 2., 2.], 'B': np.arange(1., 7.)})

In [14]: v1 = np.array([2,2,2,3,3,3])

In [15]: v2 = np.array([2,3])

In [16]: df.shape
Out[16]: (6, 2)

In [17]: v1.shape
Out[17]: (6,)

In [18]: v2.shape
Out[18]: (2,)

In [24]: df.mul(v2)
Out[24]: 
   A   B
0  2   3
1  2   6
2  2   9
3  4  12
4  4  15
5  4  18

In [26]: df.dot(v2)
Out[26]: 
0     5
1     8
2    11
3    16
4    19
5    22
dtype: float64
Run Code Online (Sandbox Code Playgroud)

所以:

df.mul 采用形状矩阵(6,2)和向量(6,1)并返回矩阵形状(6,2)

而:

df.dot 采用形状矩阵(6,2)和向量(2,1)并返回(6,1).

这些是不同的操作,它们分别是外部和内部产品.


unu*_*tbu 8

以下是如何将DataFrame乘以向量的示例:

In [60]: df = pd.DataFrame({'A': [1., 1., 1., 2., 2., 2.], 'B': np.arange(1., 7.)})

In [61]: vector = np.array([2,2,2,3,3,3])

In [62]: df.mul(vector, axis=0)
Out[62]: 
   A   B
0  2   2
1  2   4
2  2   6
3  6  12
4  6  15
5  6  18
Run Code Online (Sandbox Code Playgroud)

  • Pandas中有两种"dot"方法.`Series.dot`继承自`ndarray.dot`,因为`Series`是NumPy的`ndarray`的子类.你可以找到[这里]的文档(http://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html).至于`DataFrame.dot`,我的猜测是他们根本没有记录它.(然而,通过查看`pandas/core/frame.py`中的定义,这种行为是可以理解的.) (2认同)