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
我想基于内部级别索引= 2选择行。 看来data1.xs(2,level = 1)可以达到目的。
data1.xs(2,level=1)
Out[2]:
1 2
a 0.978738 2.240893
c 0.761038 0.121675
d 0.443863 0.333674
这是使用xs做到这一点的最佳方法吗?我可以使用loc之类的东西吗? 我知道是否有熊猫系列,我可以使用mySeries.loc [:,2]实现这一目标。我们可以做与DataFrame类似的事情吗?
答案 0 :(得分:2)
如果要保留DataFrame索引级别,请使用loc(axis=0)
:
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
xs
将在级别上进行选择并建立索引,而您在结果中失去该级别。
或者,用drop_level=False
指定xs
,以免发生这种情况:
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
大熊猫的事情是,通常没有单一/最佳的方式来做某事。做最好的事情。
答案 1 :(得分:1)
您可以对元组使用slice
索引:
data1.loc[(slice(None),2),:]
1 2
a 2 0.978738 2.24089
c 2 0.761038 0.121675
d 2 0.443863 0.333674