Pythonista anonymous
Pythonista anonymous

Reputation: 8970

How to multiply all numerical columns of a dataframe by a one-dimensional array?

I have a dataframe df of shape r x c, with 1 text column (with non-unique values) and the other columns all floats. I then have an array mult of size r. I would like each numerical column of the dataframe to be multiplied by the corresponding item of the array.

Ie the desired output is that value_1[0] should become value_1[0] * mult[0], value_2[0] should become value_2[0] * mult[0], etc.

What is an easy way to do it?

I have tried the code below but it doesn't work.

import numpy as np
import pandas as pd

df = pd.DataFrame()

df['txt']=['a','b','c','a','d']
df['value_1'] = np.arange(0,5)
df['value_2'] = np.arange(10,15)

mult = np.array([1,1,0,0,1])

newdf = df * mult

newdf2 = df.set_index('txt') * np.array

Upvotes: 0

Views: 1116

Answers (2)

Mayank Porwal
Mayank Porwal

Reputation: 34086

In [1689]: x = df.select_dtypes(int).columns

In [1690]: df[x] = df.select_dtypes('int').mul(mult, axis=0)

In [1691]: df
Out[1691]: 
  txt  value_1  value_2
0   a        0       10
1   b        1       11
2   c        0        0
3   a        0        0
4   d        4       14

Upvotes: 2

nick
nick

Reputation: 1340

You just need to represent mult as a column vector before doing the multiplication. So the following should work:

df * mult[:,None]

Study mult.shape and mult[:,None].shape to see the differences.

Upvotes: 2

Related Questions