Question

I am unable to find the entry on the method dot() in the official documentation. However the method is there and I can use it. Why is this?

On this topic, is there a way compute an element-wise multiplication of every row in a data frame with another vector? (and obtain a dataframe back?), i.e. similar to dot() but rather than computing the dot product, one computes the element-wise product.

Was it helpful?

Solution 2

Here is an example of how to multiply a DataFrame by a vector:

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

OTHER TIPS

mul is doing essentially an outer-product, while dot is an inner product. Let me expand on the accepted answer:

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

So:

df.mul takes matrix of shape (6,2) and vector (6, 1) and returns matrix shape (6,2)

While:

df.dot takes matrix of shape (6,2) and vector (2,1) and returns (6,1).

These are not the same operation, they are outer and inner products, respectively.

It's quite hard to say with a degree of accuracy.

Often, a method exists and is undocumented because it's considered internal by the vendor, and may be subject to change.

It could, of course, be a simple oversight by the folks who put together the documentation.

Regarding your second question; I don't really know about that - but it might be better to make a new S/O question for it. Just scanning the the API, could you do something with the DataFrame's .applymap(function) feature ?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top