Пример кода:
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 целые числа. Позвольте создать DataFrame таблицы T, назовем его DF. Пусть заданы столбцы A и B индексов DF (без дублирования, т.е. Нет отдельных столбцов 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 как столбцы данных в дополнение к индексу.