Как получить часть DataFrame по элементу мультииндекса?
У меня есть df, сгруппированный с использованием мультииндекса (применен метод .groupby по двум столбцам).
Выполняю:
df_by_month_group.index.levels
Получаю:
FrozenList([[9, 10, 11], ['one', 'two', 'three']])
Таким образом, могу получить доступ к первой части этого списка:
df_by_month_group.index.levels[0]
Получаю:
Int64Index([9, 10, 11], dtype='int64', name='month')
Выполняю цикл:
for i in df_by_month_group.index.levels[0]:
print(i)
Ожидаемо получаю:
9
10
11
А вот iloc для этого DataFrame не работает:
df_by_month_group.iloc[df_by_month_group.index.levels[0]==9]
IndexError: Boolean index has wrong length: 3 instead of 159
Как поправить?
Мне нужно обрезать мой исходный DataFrame таким образом, чтобы остались только значения, у которых в мультииндексе первым элементом стоит 9.
UPD: воспроизводимый результат:
first = [9,9,9,10,10,10]
second = ['one', 'two', 'three', 'one', 'two', 'three']
third = [10, 20, 30, 20, 40, 50]
test = pd.DataFrame(zip(first, second, third), columns=['mon', 'name', 'val'])
test_gr = test.groupby(['mon', 'name']).sum()
test_gr
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Вариант 1:
In [113]: test_gr.loc[pd.IndexSlice[9, :], :]
Out[113]:
val
mon name
9 one 10
three 30
two 20
Вариант 2:
In [114]: test_gr.query("mon == 9")
Out[114]:
val
mon name
9 one 10
three 30
two 20