Вы можете умножить все столбцы без предварительного выбора на DataFrame.iloc
на сопоставленные значения на year
, если совпадения не созданы, пропущенные значения заменяются на 1
в fillna
при необходимости и на несколько DataFrame.mul
:
y = df1['year'].map(df2.set_index('year')['cpi']).fillna(1)
df1.iloc[:, 1:] = df1.iloc[:, 1:].mul(y, axis=0)
print (df1)
year firm assets ppe other_variable
0 2000 1.000 50.00 2.00 5.000
1 2001 1.010 60.60 3.03 5.050
2 2000 2.000 30.00 5.00 10.000
3 2001 2.020 45.45 5.05 8.080
4 2002 2.044 51.10 10.22 8.176
Другая идея заключается в добавлении столбца cpi
к первому DataFrame
с помощью DataFrame.join
, а затем повторении с DataFrame.pop
для столбца извлечения:
df = df1.set_index('year').join(df2.set_index('year'))
df = df.mul(df.pop('cpi'), axis=0).reset_index()
print (df)
year firm assets ppe other_variable
0 2000 1.000 50.00 2.00 5.000
1 2000 2.000 30.00 5.00 10.000
2 2001 1.010 60.60 3.03 5.050
3 2001 2.020 45.45 5.05 8.080
4 2002 2.044 51.10 10.22 8.176