Reputation: 8970
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
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
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