Для таких расчетов предусмотрена функция Pandas Мультииндекс . Повторно индексируйте кадры данных до
df1 = df1.set_index(['country', 'city', 'road'])
df1
length
country city road
us ny m1 10
m2 20
la m3 30
m4 40
m5 50
df2 = df2.set_index(['country', 'city'])
df2
length
country city
us ny 1
la 2
, а затем просто умножьте на 2 кадра:
df1 = df1 * df2
df1
length
country city road
us la m3 60
m4 80
m5 100
ny m1 10
m2 20
Если хотите, вы можете сбросить индекс впоследствии:
df1.reset_index()
country city road length
us la m3 60
us la m4 80
us la m5 100
us ny m1 10
us ny m2 20