10

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

关于这个话题,有没有办法计算数据框中每一行与另一个向量的逐元素乘法?(并获得一个dataframe背面?),即类似于dot()但不是计算点积,而是计算元素乘积。

4

3 回答 3

12

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

所以:

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

尽管:

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

这些不是同一个操作,它们分别是外积和内积。

于 2014-11-10T23:16:52.707 回答
9

以下是如何将 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
于 2013-04-02T00:30:33.633 回答
1

很难准确地说出来。

通常,一种方法存在并且没有记录,因为它被供应商认为是内部的,并且可能会发生变化。

当然,这可能是整理文档的人的简单疏忽。

关于你的第二个问题;我真的不知道 - 但最好为它提出一个新的 S/O 问题。只是扫描 API,你能用 DataFrame 的 .applymap(function) 特性做点什么吗?

于 2013-04-02T00:06:27.397 回答