代码示例:
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]
与任何其他MultiIndex维度相同,例如 B 值:
Q3:在范围 [111, 500] 中重复,作为范围内的数据行数 - 预期返回值:[111, 222, 222, 333, 333]
更正式:
让我们假设 T 是一个包含 A、B 和 C 列的表。该表包括n行。表格单元格是数字,例如 A double、B 和 C 整数。让我们创建一个表 T 的DataFrame,我们将其命名为 DF。让我们设置DF的A列和B列索引(没有重复,即没有单独的列A和B作为索引,并且作为数据分开),即在这种情况下为A和B MultiIndex。
问题:
- 如何在索引上编写查询,例如查询索引 A(或 B),比如在标签区间 [120.0, 540.0] 中?存在标签 120.0 和 540.0。我必须澄清一下,我只对作为查询响应的索引列表感兴趣!
- 如何相同,但如果标签 120.0 和 540.0 不存在,但有标签值低于 120、高于 120 且低于 540 或高于 540?
- 如果 Q1 和 Q2 的答案是唯一索引值,现在相同,但有重复,作为索引范围内的数据行数。
对于不是索引的列,我知道上述问题的答案,但在索引的情况下,经过长时间的网络研究和对pandas功能的实验,我没有成功。我现在看到的唯一方法(无需额外编程)是将 A 和 B 的副本作为除索引之外的数据列。