我想调用具有相同索引的那些行。
所以这是示例数据框,
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
df = pd.DataFrame(np.random.randn(8, 4), index=arrays)
In [16]: df
Out[16]:
0 1 2 3
bar one -0.424972 0.567020 0.276232 -1.087401
two -0.673690 0.113648 -1.478427 0.524988
baz one 0.404705 0.577046 -1.715002 -1.039268
two -0.370647 -1.157892 -1.344312 0.844885
foo one 1.075770 -0.109050 1.643563 -1.469388
two 0.357021 -0.674600 -1.776904 -0.968914
qux one -1.294524 0.413738 0.276662 -0.472035
two -0.013960 -0.362543 -0.006154 -0.923061
我要选择
0 1 2 3
bar one -0.424972 0.567020 0.276232 -1.087401
baz one 0.404705 0.577046 -1.715002 -1.039268
foo one 1.075770 -0.109050 1.643563 -1.469388
qux one -1.294524 0.413738 0.276662 -0.472035
或者甚至是这种格式
0 1 2 3
one -0.424972 0.567020 0.276232 -1.087401
one 0.404705 0.577046 -1.715002 -1.039268
one 1.075770 -0.109050 1.643563 -1.469388
one -1.294524 0.413738 0.276662 -0.472035
我试过 df['bar','one]
但它不起作用。我现在确定我应该如何访问多级索引。
最佳答案
您可以使用 MultiIndex 切片(使用 slice(None)
而不是冒号):
df = df.loc[(slice(None), 'one'), :]
结果:
0 1 2 3
bar one -0.424972 0.567020 0.276232 -1.087401
baz one 0.404705 0.577046 -1.715002 -1.039268
foo one 1.075770 -0.109050 1.643563 -1.469388
qux one -1.294524 0.413738 0.276662 -0.472035
最后你可以删除第一个索引列:
df.index = df.index.droplevel(0)
结果:
0 1 2 3
one -0.424972 0.567020 0.276232 -1.087401
one 0.404705 0.577046 -1.715002 -1.039268
one 1.075770 -0.109050 1.643563 -1.469388
one -1.294524 0.413738 0.276662 -0.472035
关于python - 如何访问 Pandas 数据框中的多级索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56594197/