demand = pd.DataFrame({'Water': [4, 3], 'Elec': [8, 9]}, index=['Com', 'Ind'])

def multiply_by_demand(series):
    return demand.ix[series.name].apply(lambda x: x * series).stack()
df = areas.apply(multiply_by_demand).unstack(0)
print(df)
Pandas: join with outer product