将列的第一级映射到值并相乘:
df_res = df*df.columns.get_level_values(1).map(cost.set_index('fuel__name').cost_per_unit)
print(df_res)
Baseline Consumption
Electricity Gas Electricity Gas
C0 D0 0.00 0.03 0.24 0.09
D1 0.48 0.15 0.72 0.21
C1 D0 0.96 0.27 1.20 0.33
D1 1.44 0.39 1.68 0.45
C2 D0 1.92 0.51 2.16 0.57
D1 2.40 0.63 2.64 0.69
C3 D0 2.88 0.75 3.12 0.81
D1 3.36 0.87 3.60 0.93
MultiIndex
在各种方法中,仅对子集执行操作。
import pandas as pd
df.loc[:, df.columns.get_level_values(1) == 'Electricity']
Baseline Consumption
Electricity Electricity
C0 D0 0 2
D1 4 6
C1 D0 8 10
...
使用
pd.IndexSlice
idx = pd.IndexSlice
df.loc[:, idx[:, 'Electricity']]
Baseline Consumption
Electricity Electricity
C0 D0 0 2
D1 4 6
C1 D0 8 10
...