如何使用基于整数位置的索引访问 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中的矩阵数据

使用整数索引访问 boost::graph 中的特定边

您如何选择将基于索引的信息放入 pandas DataFrame 的位置?

如何在 Java 的随机访问文件中返回一行的位置?

如何使用 neon 访问超过 256 字节的查找表?

如何访问存储在char数组中的整数?