在 pandas 中使用 loc 而不丢弃外层
Using loc in pandas without discarding the outer levels
我有一个像
这样的数据框
df = pd.DataFrame({
'level0': [0,1,2],
'level1': ['a', 'b', 'b'],
'level2':['x', 'x', 'x'],
'data': [0.12, 0.34, 0.45]}
).set_index(['level0', 'level1', 'level2'])
level0
level1
level 2
data
0
a
x
0.12
1
b
x
0.34
2
b
x
0.56
如果level0
、level1
、level2
是索引级别,我想访问(2, b)
处的数据,但保留前两级标签。如果我做 df.loc[(2, 'b')]
输出是
level2
data
x
0.56
但我想要的输出是
level0
level1
level 2
data
2
b
x
0.56
如何在使用 loc
时保持 0 级和 1 级?我可以在之后添加这些级别,但这有点烦人,而且我经常这样做,以至于想知道是否有一步解决方案。
您可以使用 MultiIndex.get_locs
:
>>> df.loc[df.index.get_locs((2, 'b'))]
data
level0 level1 level2
2 b x 0.45
我有一个像
这样的数据框df = pd.DataFrame({
'level0': [0,1,2],
'level1': ['a', 'b', 'b'],
'level2':['x', 'x', 'x'],
'data': [0.12, 0.34, 0.45]}
).set_index(['level0', 'level1', 'level2'])
level0 | level1 | level 2 | data |
---|---|---|---|
0 | a | x | 0.12 |
1 | b | x | 0.34 |
2 | b | x | 0.56 |
如果level0
、level1
、level2
是索引级别,我想访问(2, b)
处的数据,但保留前两级标签。如果我做 df.loc[(2, 'b')]
输出是
level2 | data |
---|---|
x | 0.56 |
但我想要的输出是
level0 | level1 | level 2 | data |
---|---|---|---|
2 | b | x | 0.56 |
如何在使用 loc
时保持 0 级和 1 级?我可以在之后添加这些级别,但这有点烦人,而且我经常这样做,以至于想知道是否有一步解决方案。
您可以使用 MultiIndex.get_locs
:
>>> df.loc[df.index.get_locs((2, 'b'))]
data
level0 level1 level2
2 b x 0.45