2013-04-02 90 views
7

我無法在方法dot()in the official documentation上找到條目。然而,該方法在那裏,我可以使用它。爲什麼是這樣?在Pandas中獲取數據幀與矢量的點積,並返回數據幀

關於這個話題,有沒有一種方法計算一個數據幀中每一行與另一個向量的元素乘法? (並且返回dataframe),即類似於dot(),但不是計算點積,而是計算基於元素的產品。

+0

您可以將此作爲[github上的問題](https://github.com/pydata/pandas/issues)發佈。如果你檢出文檔字符串,它會告訴你它做了什麼(如果你使用ipython,使用'df.dot?')。 –

回答

8

下面是如何由矢量乘以一個數據幀的例子:

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 
+0

謝謝!你知道爲什麼'dot()'不是官方文檔的一部分嗎? –

+2

熊貓有兩種'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'中的定義,它的行爲是非常容易理解的。) – unutbu

+1

更新:'pandas.Series'不再是'ndarray'的子類,但它仍然有一個['dot '方法](http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.Series.dot.html)。 – unutbu

1

這很難用一定的準確度來說。

通常情況下,一種方法存在並且沒有記錄,因爲它被供應商認爲是內部的,並且可能會發生變化。

當然,這可能是由編寫文檔的人們進行簡單的監督。

關於你的第二個問題;我並不真正瞭解這一點 - 但是爲它製作一個新的S/O問題可能會更好。 只需掃描API,您可以使用DataFrame的.applymap(函數)功能做些什麼嗎?

6

乘法基本上從事外產物。如果我的線性代數記憶是正確的,則點是內積。讓我接受的答案展開:

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)

While:

df.dot取形狀(6,2)和向量(2,1)的矩陣並返回(6,1)。

這些是不一樣的操作,它們分別是(我認爲)外部和內部產品。

+1

謝謝,我發現這是這裏最有用的答案。還比熊貓文檔更好。 – smci