Pandas 多索引:高级索引-如何选择数据帧的不同部分?
我的矩阵是df2。现在我想选择“foo”、“one”和“two”的所有行,但只选择多索引“bar”的“one”行。这似乎很容易,但我已经尝试了很多事情都没有成功Pandas 多索引:高级索引-如何选择数据帧的不同部分?,pandas,indexing,multi-index,Pandas,Indexing,Multi Index,我的矩阵是df2。现在我想选择“foo”、“one”和“two”的所有行,但只选择多索引“bar”的“one”行。这似乎很容易,但我已经尝试了很多事情都没有成功 arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])] df2 = pd.Dat
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
df2 = pd.DataFrame(np.random.randn(8, 4), index=arrays)
,生成一个类似的矩阵,但包含我不想要的“baz”行
df2.loc['bar':('foo','one')]
,也类似,但第二行的“foo”,“two”我不想要
df2.loc['bar':('foo','one')]
如果有人能提供帮助并提供一些处理多索引的技巧,那就太好了 在单行中,IMO最简单的方法是使用查询构建表达式,如下所述:
否则,使用更常规的方法,您可以考虑
df.query("ilevel_0 == 'foo' or (ilevel_0 == 'bar' and ilevel_1 == 'one')")
0 1 2 3
bar one 0.249768 0.619312 1.851270 -0.593451
foo one 0.770139 -2.205407 0.359475 -0.754134
two -1.109005 -0.802934 0.874133 0.135057
其中包括两部分:
pd.concat([df.loc[['foo']], df.loc[[('bar', 'one')]]])
0 1 2 3
foo one 0.770139 -2.205407 0.359475 -0.754134
two -1.109005 -0.802934 0.874133 0.135057
bar one 0.249768 0.619312 1.851270 -0.593451
以及
每个索引周围的大括号用于防止级别在切片操作过程中下降。我很有信心这会有所帮助。谢谢您的回复!这将是解决问题的最快方法:<代码> Pd。CONAT([DF.LOC[[ Fo''] ],DF.LOC[[(Bar),'One ] ] ] ] @ @ EZRabLeMeNDEAL,请考虑投票并标记接受的答案(点击左边的灰色检查,将其切换为绿色)。这表明你觉得这个答案很有帮助。非常感谢。
df.loc[['foo']]
0 1 2 3
foo one 0.770139 -2.205407 0.359475 -0.754134
two -1.109005 -0.802934 0.874133 0.135057
df.loc[[('bar', 'one')]]
0 1 2 3
bar one 0.249768 0.619312 1.85127 -0.593451