Jiayang Zhuo
Jiayang Zhuo

Reputation: 227

how to multiply multiple columns by another column pandas

I have a Dataframe of 100 Columns and I want to multiply one column ('Count') value with the columns position ranging from 6 to 74. Please tell me how to do that. I have been trying

df = df.ix[0, 6:74].multiply(df["Count"], axis="index")
df = df[df.columns[6:74]]*df["Count"]

None of them is working

The result Dataframe should be of 100 columns with all original columns where columns number 6 to 74 have the multiplied values in all the rows.

Upvotes: 6

Views: 13923

Answers (5)

user10001343
user10001343

Reputation:

You need to concatenate the data frame resulting from multiplication with the remaining columns:

df=pd.concat( [df.iloc[0:6],df.iloc[75:],df.iloc[:,6:74+1].multiply(df['Count'],axis=0)]  , axis=1)

Upvotes: 0

BENY
BENY

Reputation: 323396

By using combine_first

df.iloc[:, 3:6+1].mul(df['Count'],axis=0).combine_first(df)

Upvotes: 3

piRSquared
piRSquared

Reputation: 294546

Assuming the same dataframe provided by @MaxU

Not easier, but a perspective on how to use other api elements.
pd.DataFrame.update and pd.DataFrame.mul

df.update(df.iloc[:, 3:7].mul(df.Count, 0))
df

    0   1   2          3          4          5          6   7   8   9     Count
0  89  38  89  15.366436   1.355862   7.231264   4.971494  12  70  69  0.225977
1  49   1  38   1.004190   1.095480   2.829990   0.273870  57  93  64  0.030430
2   2  53  49  49.749460  50.379200  54.157640  16.373240  22  31  41  0.629740
3  38  44  23  28.437516  73.545300  41.185368  73.545300  19  99  57  0.980604
4  45   2  60  10.093230   4.773825  10.502415   6.274170  43  63  55  0.136395
5  65  97  15  10.375760  57.066680  38.260615  14.915155  68   5  21  0.648485
6  95  90  45  52.776000  16.888320  22.517760  50.664960  76  32  75  0.703680
7  60  31  65  63.242210   2.976104  26.784936  38.689352  72  73  94  0.744026
8  64  96  96   7.505370  37.526850  11.007876  10.007160  68  56  39  0.500358
9  78  54  74   8.409275  25.227825  16.528575   9.569175  97  63  37  0.289975

Upvotes: 7

cs95
cs95

Reputation: 403218

The easiest thing to do here would be to extract the values, multiply, and then assign.

u = df.iloc[0, 6:74].values
v = df[['count']]

df = pd.DataFrame(u * v)

Upvotes: 3

MaxU - stand with Ukraine
MaxU - stand with Ukraine

Reputation: 210982

Demo:

Sample DF:

In [6]: df = pd.DataFrame(np.random.randint(100,size=(10,10))) \
               .assign(Count=np.random.rand(10))

In [7]: df
Out[7]:
    0   1   2   3   4   5   6   7   8   9     Count
0  89  38  89  68   6  32  22  12  70  69  0.225977
1  49   1  38  33  36  93   9  57  93  64  0.030430
2   2  53  49  79  80  86  26  22  31  41  0.629740
3  38  44  23  29  75  42  75  19  99  57  0.980604
4  45   2  60  74  35  77  46  43  63  55  0.136395
5  65  97  15  16  88  59  23  68   5  21  0.648485
6  95  90  45  75  24  32  72  76  32  75  0.703680
7  60  31  65  85   4  36  52  72  73  94  0.744026
8  64  96  96  15  75  22  20  68  56  39  0.500358
9  78  54  74  29  87  57  33  97  63  37  0.289975

Let's multiply columns 3-6 by df['Count']:

In [8]: df.iloc[:, 3:6+1]
Out[8]:
    3   4   5   6
0  68   6  32  22
1  33  36  93   9
2  79  80  86  26
3  29  75  42  75
4  74  35  77  46
5  16  88  59  23
6  75  24  32  72
7  85   4  36  52
8  15  75  22  20
9  29  87  57  33

In [9]: df.iloc[:, 3:6+1] *= df['Count']

In [10]: df
Out[10]:
    0   1   2          3          4          5          6   7   8   9     Count
0  89  38  89  66.681065   0.818372  20.751519  15.480964  12  70  69  0.225977
1  49   1  38  32.359929   4.910233  60.309102   6.333122  57  93  64  0.030430
2   2  53  49  77.467708  10.911630  55.769707  18.295685  22  31  41  0.629740
3  38  44  23  28.437513  10.229653  27.236368  52.776014  19  99  57  0.980604
4  45   2  60  72.564688   4.773838  49.933342  32.369289  43  63  55  0.136395
5  65  97  15  15.689662  12.002793  38.260613  16.184644  68   5  21  0.648485
6  95  90  45  73.545292   3.273489  20.751519  50.664974  76  32  75  0.703680
7  60  31  65  83.351331   0.545581  23.345459  36.591370  72  73  94  0.744026
8  64  96  96  14.709058  10.229653  14.266669  14.073604  68  56  39  0.500358
9  78  54  74  28.437513  11.866397  36.963643  23.221446  97  63  37  0.289975

Upvotes: 4

Related Questions