如何使用基于整数位置的索引访问 MultiIndex 数据帧中的行
Posted
技术标签:
【中文标题】如何使用基于整数位置的索引访问 MultiIndex 数据帧中的行【英文标题】:How to access rows in a MultiIndex dataframe by using integer-location based indexing 【发布时间】:2021-12-27 04:03:09 【问题描述】:假设我有以下 MultiIndex DataFrame,标题为 df
:
arrays = [["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],
["one", "two", "one", "two", "one", "two", "one", "two"],]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=["first", "second"])
df = pd.Series(np.random.randn(8), index=index)
如果我想访问与baz
关联的所有行,例如,我会使用横截面:df.xs(('baz'))
。
但是有没有办法通过引用第一级中的整数位置来访问行,类似于单索引数据帧的iloc
?在我的示例中,我认为这将是索引位置 1。
我尝试了使用.loc
的解决方法,如下所示:
(df.loc[[df.index.get_level_values(0)[1]]]
但这会返回与bar
关联的第一组行。我相信这是因为整数位置 1 仍在bar
内。我必须参考 2 才能到达 baz
。
我可以让位置 0、1、2 和 3 分别引用 bar、baz、foo 和 qux 吗?
【问题讨论】:
【参考方案1】:您可以使用levels
df.xs(df.index.levels[0][1])
second
one -1.052578
two 0.565691
dtype: float64
更多细节
df.index.levels[0][0]
'bar'
df.index.levels[0][1]
'baz'
【讨论】:
以上是关于如何使用基于整数位置的索引访问 MultiIndex 数据帧中的行的主要内容,如果未能解决你的问题,请参考以下文章
如何通过另一个具有位置(索引)的垫子访问opencv中的矩阵数据