我無法在方法dot()
in the official documentation上找到條目。然而,該方法在那裏,我可以使用它。爲什麼是這樣?在Pandas中獲取數據幀與矢量的點積,並返回數據幀
關於這個話題,有沒有一種方法計算一個數據幀中每一行與另一個向量的元素乘法? (並且返回dataframe
),即類似於dot()
,但不是計算點積,而是計算基於元素的產品。
我無法在方法dot()
in the official documentation上找到條目。然而,該方法在那裏,我可以使用它。爲什麼是這樣?在Pandas中獲取數據幀與矢量的點積,並返回數據幀
關於這個話題,有沒有一種方法計算一個數據幀中每一行與另一個向量的元素乘法? (並且返回dataframe
),即類似於dot()
,但不是計算點積,而是計算基於元素的產品。
下面是如何由矢量乘以一個數據幀的例子:
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()'不是官方文檔的一部分嗎? –
熊貓有兩種'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
更新:'pandas.Series'不再是'ndarray'的子類,但它仍然有一個['dot '方法](http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.Series.dot.html)。 – unutbu
這很難用一定的準確度來說。
通常情況下,一種方法存在並且沒有記錄,因爲它被供應商認爲是內部的,並且可能會發生變化。
當然,這可能是由編寫文檔的人們進行簡單的監督。
關於你的第二個問題;我並不真正瞭解這一點 - 但是爲它製作一個新的S/O問題可能會更好。 只需掃描API,您可以使用DataFrame的.applymap(函數)功能做些什麼嗎?
乘法基本上從事外產物。如果我的線性代數記憶是正確的,則點是內積。讓我接受的答案展開:
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)。
這些是不一樣的操作,它們分別是(我認爲)外部和內部產品。
謝謝,我發現這是這裏最有用的答案。還比熊貓文檔更好。 – smci
您可以將此作爲[github上的問題](https://github.com/pydata/pandas/issues)發佈。如果你檢出文檔字符串,它會告訴你它做了什麼(如果你使用ipython,使用'df.dot?')。 –