我正在尝试对具有两个行ID的层次结构数据进行子集化。

假设我在hdf中有数据

index = MultiIndex(levels=[['foo', 'bar', 'baz', 'qux'],
                                   ['one', 'two', 'three']],
                           labels=[[0, 0, 0, 1, 1, 2, 2, 3, 3, 3],
                                   [0, 1, 2, 0, 1, 1, 2, 0, 1, 2]])
hdf = DataFrame(np.random.randn(10, 3), index=index,
                columns=['A', 'B', 'C'])
hdf


我希望将其作为子集,以便我看到fooqux,该子集仅返回子行two和列AC

我可以分两个步骤进行操作,如下所示:

sub1 = hdf.ix[['foo','qux'], ['A', 'C']]
sub1.xs('two', level=1)


有单步执行此操作的方法吗?

谢谢

最佳答案

In [125]: hdf[hdf.index.get_level_values(0).isin(['foo', 'qux']) & (hdf.index.get_level_values(1) == 'two')][['A', 'C']]
Out[125]:
                A         C
foo two -0.113320 -1.215848
qux two  0.953584  0.134363


要复杂得多,但是如果要在第一级中选择许多不同的值,那就更好了。

08-20 03:31