Python 选择内部级别索引数据
我想根据内部级别索引=2选择行。 看起来data1.xs(2,level=1)将实现这一点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
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