say I have two dfs: df1:
| new_col | attribute | y1 |
|---|---|---|
| petrol | car | 0.3 |
| diesel | car | 0.4 |
| rigid | hgv | 0.25 |
| artic | hgv | 0.35 |
the other data frame (df2) has the attribute column from df1 in common:
| id | car | hgv |
|---|---|---|
| 1 | 10 | 1000 |
| 2 | 1000 | 10 |
| 3 | 100 | 10000 |
I am trying to add the names of new_col from df1 as new columns in df2 and populate it by multiplying y1/y2 by the corresponding attribute column in df2 for y1 and y2.
That is what I am trying to get:

CodePudding user response:
Create MultiIndex Series by new_col,attribute and multiple all columns in df2 without id, remove second level of MultiIndex by DataFrame.droplevel, join df2 and last use DataFrame.convert_dtypes for integers columns:
s = df1.set_index(['new_col','attribute'])['y1']
df = df2.join(df2.drop('id',1).mul(s, level=1).droplevel(1, axis=1)).convert_dtypes()
print (df)
id car hgv petrol diesel rigid artic
0 1 10 1000 3 4 250.0 350.0
1 2 1000 10 300 400 2.5 3.5
2 3 100 10000 30 40 2500.0 3500.0
