Ошибка "Too many levels: Index has only 1 level, not 3" возникает, когда вы пытаетесь использовать метод `.query` на DataFrame с многоуровневым (multi-level) индексом, но неправильно обращаетесь к уровням индекса.
Метод `.query` работает с именами столбцов, а не с индексом. Если вам нужно выполнять запросы на индексах, вам может понадобиться использовать другой подход, например, метод `.loc`.
Чтобы исправить эту ошибку, вы можете попробовать следующие решения:
1. **Сбросить индекс**: Если вы хотите работать с индексом как с обычными столбцами, можно сбросить индекс перед использованием `.query()`.
```python
df.reset_index(inplace=True)
result = df.query('your_condition')
```
2. **Использовать `df.loc[]`**: Если вы хотите фильтровать данные на основе значений индекса, вы можете использовать `df.loc[]` вместо `df.query()`.
```python
result = df.loc[(df.index.get_level_values(0) == value1) & (df.index.get_level_values(1) == value2)]
```
3. **Проверка наличия многомерного индекса**: Убедитесь, что ваш DataFrame действительно имеет многоуровневый индекс, используя атрибут `.index`. Если это так, вы можете использовать методы, соответствующие работе с многоуровневыми индексами.
### Пример
Допустим, у вас есть DataFrame с многоуровневым индексом:
```python
import pandas as pd
# Создаем пример DataFrame с многоуровневым индексом
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1)], names=['index1', 'index2'])
df = pd.DataFrame({'value': [10, 20, 30]}, index=index)
# Попробуем использовать .query()
try:
result = df.query('index1 == "A" and index2 == 1')
except Exception as e:
print(e)
```
В этом случае вам нужно сбросить индекс или использовать `.loc`:
```python
# Сбросить индекс
df_reset = df.reset_index()
result = df_reset.query('index1 == "A" and index2 == 1')
# Или использовать .loc
result = df.loc[('A', 1)]
```
Если ни одно из этих решений не подходит, пожалуйста, предоставьте дополнительную информацию о структуре вашего DataFrame и используемом запросе, чтобы можно было дать более конкретные советы.