代码示例:
In [171]: A = np.array([1.1, 1.1, 3.3, 3.3, 5.5, 6.6])
In [172]: B = np.array([111, 222, 222, 333, 333, 777])
In [173]: C = randint(10, 99, 6)
In [174]: df = pd.DataFrame(zip(A, B, C), columns=['A', 'B', 'C'])
In [175]: df.set_index(['A', 'B'], inplace=True)
In [176]: df
Out[176]:
C
A B
1.1 111 20
222 31
3.3 222 24
333 65
5.5 333 22
6.6 777 74
现在,我想检索 A 值:
Q1:在 [3.3, 6.6] 范围内 - 预期返回值:[3.3, 5.5, 6.6] 或 [3.3, 3.3, 5.5, 6.6](如果包含最后一个),以及 [3.3, 5.5] 或 [3.3, 3.3, 5.5] 如果不是。
Q2:范围 [2.0, 4.0] - 预期返回值:[3.3] 或 [3.3, 3.3]
对于任何其他的都一样多重索引尺寸,例如 B 值:
Q3:在范围 [111, 500] 内重复,作为范围内的数据行数 - 预期返回值:[111, 222, 222, 333, 333]
更正式:
假设 T 是一个包含 A、B 和 C 列的表。该表包括n行。表格单元格是数字,例如 A 双精度型、B 和 C 整数。让我们创建一个数据框表 T 的数据,我们将其命名为 DF。让我们设置 DF 的 A 列和 B 列索引(不重复,即没有单独的 A 列和 B 列作为索引,并且单独作为数据),即本例中的 A 和 B多重索引.
问题:
- 如何在索引上编写查询,例如查询索引 A(或 B),例如在标签区间 [120.0, 540.0] 中?存在标签 120.0 和 540.0。我必须澄清,我只对作为查询响应的索引列表感兴趣!
- 如何相同,但如果标签 120.0 和 540.0 不存在,但存在值低于 120、高于 120 且低于 540 或高于 540 的标签?
- 如果 Q1 和 Q2 的答案是唯一索引值,现在相同,但有重复,作为索引范围内的数据行数。
我知道在不是索引的列的情况下上述问题的答案,但在索引的情况下,经过在网络上的长期研究和对以下功能的实验pandas,我没有成功。我现在看到的唯一方法(无需额外编程)是除了索引之外还有 A 和 B 的副本作为数据列。