【问题标题】:Get dot-product of dataframe with vector, and return dataframe, in Pandas在 Pandas 中获取数据帧与向量的点积,并返回数据帧
【发布时间】:2013-04-02 00:00:06
【问题描述】:

我找不到方法 dot() in the official documentation 的条目。但是方法就在那里,我可以使用它。这是为什么呢?

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

【问题讨论】:

  • 您可以将其发布为an issue on github。如果您检查 dot 上的文档字符串,它会告诉您它的作用(如果您使用 ipython,请使用 df.dot?)。

标签: python pandas dataframe dot-product


【解决方案1】:

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)。

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

【讨论】:

  • 谢谢,我发现这是最有帮助的答案。也比 pandas doc 好。
【解决方案2】:

这是一个如何将 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

【讨论】:

  • 谢谢!。你知道为什么dot() 不是官方文档的一部分吗?
  • Pandas 中有两个dot 方法。 Series.dot 继承自 ndarray.dot,因为 Series 是 NumPy 的 ndarray 的子类。您可以找到该here 的文档。至于DataFrame.dot,我的猜测是他们根本没有时间记录它。 (不过,通过查看 pandas/core/frame.py 中的定义可以理解它的行为。)
  • 更新:pandas.Series 不再是ndarray 的子类,但它仍然拥有dot method
【解决方案3】:

很难准确地说出来。

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

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

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

【讨论】:

    猜你喜欢
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2023-03-09
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多