Python 选择内部级别索引数据

Python 选择内部级别索引数据,python,pandas,dataframe,Python,Pandas,Dataframe,我想根据内部级别索引=2选择行。 看起来data1.xs(2,level=1)将实现这一点 np.random.seed(0) data1 = pd.DataFrame(np.random.randn(18).reshape(9,2), index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'], [1, 2, 3, 1, 3, 1, 2, 2, 3]], column

我想根据内部级别索引=2选择行。 看起来data1.xs(2,level=1)将实现这一点

np.random.seed(0)
data1 = pd.DataFrame(np.random.randn(18).reshape(9,2),
                 index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],
                        [1, 2, 3, 1, 3, 1, 2, 2, 3]], columns = [1,2])
data1
Out[1]: 
            1         2
a 1  1.764052  0.400157
  2  0.978738  2.240893
  3  1.867558 -0.977278
b 1  0.950088 -0.151357
  3 -0.103219  0.410599
c 1  0.144044  1.454274
  2  0.761038  0.121675
d 2  0.443863  0.333674
  3  1.494079 -0.205158
这是使用xs实现这一点的最佳方法吗?我能用像loc这样的东西吗。
我知道如果有熊猫系列,我可以使用mySeries.loc[:,2]来实现这一点。我们可以对DataFrame执行类似的操作吗?

您可以使用元组的
slice
索引:

data1.xs(2,level=1)

    Out[2]: 
          1         2
a  0.978738  2.240893
c  0.761038  0.121675
d  0.443863  0.333674

如果要保留数据帧索引级别,请使用
loc(axis=0)

xs
将在该级别上进行选择和索引,您将在结果中丢失该级别。
或者,使用
xs
指定
drop_level=False
,这样就不会发生这种情况:

data1.loc(axis=0)[:, 2]

            1         2
a 2  0.978738  2.240893
c 2  0.761038  0.121675
d 2  0.443863  0.333674
熊猫的问题是,通常没有单一/最好的方式来做某事。做感觉最好的事

data1.loc(axis=0)[:, 2]

            1         2
a 2  0.978738  2.240893
c 2  0.761038  0.121675
d 2  0.443863  0.333674
data1.xs(2, level=1, drop_level=False)

            1         2
a 2  0.978738  2.240893
c 2  0.761038  0.121675
d 2  0.443863  0.333674