蛊毒传说
首先,我们创建一个 DataFrame(带有 MultiIndex),就像您的示例中的那样:import numpy as npimport pandas as pddata = np.arange(11 * 8).reshape((11, 8))midx = pd.MultiIndex.from_tuples( [ ('2020-01-01', 'A', 'C1', 'D1'), ('2020-01-01', 'A', 'C1', 'D2'), ('2020-01-01', 'A', 'C2', 'D3'), ('2020-01-01', 'A', 'C2', 'D4'), ('2020-01-01', 'B', 'C3', 'D5'), ('2020-01-01', 'B', 'C3', 'D6'), ('2020-01-01', 'B', 'C4', 'D7'), ('2020-01-01', 'B', 'C4', 'D8'), ], names=('y', 'a', 'b', 'c',))df = pd.DataFrame(data=data, columns=midx)df现在,我们使用有点麻烦的“索引切片”来提取感兴趣的列。这里有一些例子:# get the 'A' columnsdf.loc[:, (slice(None), 'A')] # get the 'C1' columndf.loc[:, (slice(None), slice(None), 'C1')] # get the D1 and D5 columnsdf.loc[:, (slice(None), slice(None), slice(None), ['D1', 'D5'])] y 2020-01-01a A Bb C1 C3c D1 D50 0 41 8 122 16 203 24 284 32 365 40 446 48 527 56 608 64 689 72 7610 80 84这是执行最后一个操作后的 MultiIndex:df.loc[:, (slice(None), slice(None), slice(None), ['D1', 'D5'])].columnsMultiIndex([('2020-01-01', 'A', 'C1', 'D1'), ('2020-01-01', 'B', 'C3', 'D5')], names=['y', 'a', 'b', 'c'])