I have few pandas DataFrames (say a
, b
, c
) like this:
And another Dataframe (name it x
), whose number of rows are equal to the number of dataframes like above:
How can I multiply the entire first column of the first dataframe (a
) with x[0][0]
?
Then the second column of the dataframe a
(bb_11
) with x[0][1]
.
Then the third column of the dataframe a
(cc_12
) with x[0][2]
, and so on.
For dataframe b
, we should use the second row of x
, i.e. x[1][j]
(where j
varies from 0-3). That is, I need to multiply the entire first column of the second dataframe (b
) with x[1][0]
.
Then the second column of the dataframe b
(bb_11
) with x[1][1]
.
Then the third column of the dataframe b
(cc_12
) with x[1][2]
, and so on.
N.B. All dataframe column names will be the same. Our dataframes will be read from a file so looping will be an easier option.
Sample Data:
import pandas as pd
d = {'aa_10' : pd.Series([np.nan, 2, 3, 4]),
'bb_11' : pd.Series([6, np.nan, 8, 9]),
'cc_12' : pd.Series([1, 2, np.nan, 4]),
'dd_13' : pd.Series([6, 7, 8, np.nan])}
# creates Dataframe.
a = pd.DataFrame(d)
# print the data.
print (a)
# Initialize data to Dicts of series.
d = {'aa_10' : pd.Series([np.nan, 12, 13, 14]),
'bb_11' : pd.Series([16, np.nan, 18, 19]),
'cc_12' : pd.Series([11, 12, np.nan, 14]),
'dd_13' : pd.Series([16, 17, 18, np.nan])}
# creates Dataframe.
b = pd.DataFrame(d)
# print the data.
print(b)
# Initialize data to Dicts of series.
d = {'aa_10' : pd.Series([np.nan, 21, 31, 41]),
'bb_11' : pd.Series([61, np.nan, 81, 91]),
'cc_12' : pd.Series([11, 21, np.nan, 41]),
'dd_13' : pd.Series([61, 71, 81, np.nan])}
# creates Dataframe.
c = pd.DataFrame(d)
# print the data.
print(c)
# Initialize data to Dicts of series.
d = {'aa_10' : pd.Series([1, 2, 3]),
'bb_11' : pd.Series([6, 7, 8]),
'cc_12' : pd.Series([10, 11, 12]),
'dd_13' : pd.Series([13, 14, 15])}
# creates Dataframe.
x = pd.DataFrame(d)
# print the data.
print(x)
CodePudding user response:
You can do that
a,b,c = [x.mul(y) for x , y in zip([a,b,c],x.values.tolist())]
a
aa_10 bb_11 cc_12 dd_13
0 NaN 36.0 10.0 78.0
1 2.0 NaN 20.0 91.0
2 3.0 48.0 NaN 104.0
3 4.0 54.0 40.0 NaN