midx = pd.MultiIndex(levels=[['zero', 'one'], ['x', 'y']],labels = [[1, 1, 0, 0],[1, 0, 1, 0]])
df = pd.DataFrame(np.random.randn(4, 2), index=midx)
>>midx
0 1
one y 0.477304 0.247328
x -1.267339 -1.779735
zero y 0.812613 1.119952
x 0.092788 0.384020
df.xs('one')[1]
Out[44]:
y 0.247328
x -1.779735
答案 0 :(得分:1)
IIUC:
In [74]: df.loc['one', 1]
Out[74]:
y 0.247328
x -1.779735
Name: 1, dtype: float64
或更明确地说:
In [80]: df.loc[pd.IndexSlice['one', :], 1]
Out[80]:
one y 0.247328
x -1.779735
Name: 1, dtype: float64
答案 1 :(得分:0)
作为pd.IndexSlice
的替代方法,您可以使用pd.DataFrame.query
并在单独的步骤中选择列:
res = df.query('ilevel_0 == "one"').loc[:, 1]
根据the docs,ilevel_0
用于表示第一个未命名索引。为了清楚起见,如果在构造数据框时将其定义为真实名称,则可以将其替换为真实名称。