我认为最简单的是使用xs http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.xs.html:
np.random.seed(100)
names = ['Taxon','Patient']
mux = pd.MultiIndex.from_product([['Firmicutes', 'another'], range(1, 6)], names=names)
df = pd.DataFrame(np.random.randint(10, size=(10,2)), columns=['Tissue','Stool'], index=mux)
print (df)
Tissue Stool
Taxon Patient
Firmicutes 1 8 8
2 3 7
3 7 0
4 4 2
5 5 2
another 1 2 2
2 1 0
3 8 4
4 0 9
5 6 2
print (df.xs(2, level=1))
Tissue Stool
Taxon
Firmicutes 3 7
another 1 0
#if need also level Patient
print (df.xs(2, level=1, drop_level=False))
Tissue Stool
Taxon Patient
Firmicutes 2 3 7
another 2 1 0
解决方案与loc http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html- 可以指定axis
:
print (df.loc(axis=0)[:,2])
Tissue Stool
Taxon Patient
Firmicutes 2 3 7
another 2 1 0