使用整数值对 MultiIndex Pandas Dataframe 进行切片不正确?

问题描述 投票:0回答:2

我们有一个 MultiIndex DataFrame,其中顶级索引使用整数值。对特定值进行切片会返回直到请求值为止的所有索引值,而不仅仅是请求值。这是一个错误,还是我们做错了?

示例:

import numpy as np
import pandas as pd
midx = pd.MultiIndex.from_product([[1,2], ['A', 'B']])
df = pd.DataFrame(np.arange(4).reshape((len(midx), 1)), index=midx, columns=['Values'])

df.loc[(slice(1), slice(None)), :]  # Slice for only top index value=1

第一个切片仅返回索引值 = 1,如预期:

        Values
1   A   0
1   B   1

但是:

df.loc[(slice(2), slice(None)), :]  # Slice for only top index value=2

返回索引值 1 和值 2,如下所示:

        Values
1   A   0
1   B   1
2   A   2
2   B   3

我们期望的是:

        Values
2   A   2
2   B   3
pandas dataframe multi-index numpy-slicing
2个回答
0
投票

您需要

slice(2, 3)
来提取第二个索引,当仅提供一个参数时,它被视为
stop
参数
,因此返回该索引之前的所有内容:

df.loc[(slice(2, 3), slice(None)), :]
#     Values
#2 A       2
#  B       3

0
投票

当您调用

slice(x)
时,
x
停止值(参见手册);所以它会将所有内容返回到该值。根据您的情况,您可以直接提供所需的索引:

df.loc[(2, slice(None)), :]

输出:

     Values
2 A       2
  B       3
© www.soinside.com 2019 - 2024. All rights reserved.