I have two DataFrames df1
and df2
and two arrays mul1
and mul2
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'A': [100, 200], 'B': [50, 150], 'C': [40, 120]})
# A B C
# 0 100 50 40
# 1 200 150 120
df2 = pd.DataFrame({'A': [5, 1], 'B': [3, 25], 'C': [10, 11]})
# A B C
# 0 5 3 10
# 1 1 25 11
mul1 = np.array([.1, .2, .3])
mul2 = np.array([1.1, 1.2, 1.3])
I would like to use something like pd.mul
or np.multiply
to multiply df1
by elements in either mul1
or mul2
depending on their corresponding values in df2
.
For column A, df1
needs to be multiplied by the mul1[0]
if df2['A'] > 3
, otherwise it needs to be multiplied by mul2[0]
.
For columns B and C, the corresponding criteria is df2['B'] > 12
and df2['C'] > 15
.
So the correct output is:
A B C
0 10 60 52
1 220 30 156
Does anyone have a good way to do this?
CodePudding user response:
Using np.where, we can specify a condition in the 1st parameter, and the operations we want in the 2nd and 3rd parameters:
df1['A'] = np.where(df2['A'] > 3, df1['A'] * mul1[0], df1['A'] * mul2[0])
df1['B'] = np.where(df2['B'] > 12, df1['B'] * mul1[1], df1['B'] * mul2[1])
df1['C'] = np.where(df2['C'] > 15, df1['C'] * mul1[2], df1['C'] * mul2[2])