这里是第一次海报。我无法理解 .loc
适用于 DataFrame
有一个 MultiIndex
。更具体地说,我对 2 级 MultiIndex
的情况感兴趣。我想通过第二级的标签选择值。
例如,使用 DataFrame
loc
的文档中定义:
tuples = [
('cobra', 'mark i'), ('cobra', 'mark ii'),
('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
('viper', 'mark ii'), ('viper', 'mark iii')
]
index = pd.MultiIndex.from_tuples(tuples)
values = [[12, 2], [0, 4], [10, 20],
[1, 4], [7, 1], [16, 36]]
df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)
df
--------------------------------------
max_speed shield
cobra mark i 12 2
mark ii 0 4
sidewinder mark i 10 20
mark ii 1 4
viper mark ii 7 1
mark iii 16 36
我想选择mark ii
对应的值,无论第一级标签如何。我可以使用xs
:
df.xs("mark ii", level=1)
-----------------------------
max_speed shield
cobra 0 4
sidewinder 1 4
viper 7 1
我想我可以使用 loc
:
df.loc[:, "mark ii"]
-------------------
KeyError: 'mark ii'
但是,如果执行以下操作,我会得到预期的结果:
df.loc[:, "mark ii", :] # <-- note the added colon after 'mark ii'
-----------------------------
max_speed shield
cobra 0 4
sidewinder 1 4
viper 7 1
有人可以解释一下为什么df.loc[:, "mark ii"]
在这里不起作用?
最佳答案
不能直接使用:
来指定级别。 df.loc[:, "mark ii"]
意思是:选择所有行(:
),以及“mark ii”列(不存在)。
正确的做法应该是使用IndexSlice
:
df.loc[pd.IndexSlice[:, "mark ii"], :]
# or slice
df.loc[(slice(None), 'mark ii'), :]
您还可以在 loc
中指定轴:
df.loc(axis=0)[:, "mark ii"]
输出:
max_speed shield
cobra mark ii 0 4
sidewinder mark ii 1 4
viper mark ii 7 1
关于python - 如何使用 .loc 和 MultiIndex 获取 Pandas DataFrame 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76211506/