Zhubarb - 1 year ago 109

Python Question

I know how to do element by element multiplication between two Pandas dataframes. However, things get more complicated when the dimensions of the two dataframes are not compatible. For instance below

`df * df2`

`df * df3`

`df = pd.DataFrame({'col1' : [1.0] * 5,`

'col2' : [2.0] * 5,

'col3' : [3.0] * 5 }, index = range(1,6),)

df2 = pd.DataFrame({'col1' : [10.0] * 5,

'col2' : [100.0] * 5,

'col3' : [1000.0] * 5 }, index = range(1,6),)

df3 = pd.DataFrame({'col1' : [0.1] * 5}, index = range(1,6),)

df.mul(df2, 1) # element by element multiplication no problems

df.mul(df3, 1) # df(row*col) is not equal to df3(row*col)

col1 col2 col3

1 0.1 NaN NaN

2 0.1 NaN NaN

3 0.1 NaN NaN

4 0.1 NaN NaN

5 0.1 NaN NaN

In the above situation,

`df3.col1`

`len(df.columns.values)`

`df`

`df3 = pd.DataFrame([df3.col1 for n in range(len(df.columns.values)) ])`

df3

1 2 3 4 5

col1 0.1 0.1 0.1 0.1 0.1

col1 0.1 0.1 0.1 0.1 0.1

col1 0.1 0.1 0.1 0.1 0.1

But this creates a dataframe of dimensions 3 * 5, whereas I am after 5*3. I know I can take the transpose with

`df3.T()`

Answer Source

```
In [161]: pd.DataFrame(df.values*df2.values, columns=df.columns, index=df.index)
Out[161]:
col1 col2 col3
1 10 200 3000
2 10 200 3000
3 10 200 3000
4 10 200 3000
5 10 200 3000
```