Это может быть возможно при некоторых логических условиях в столбцах индекса i0
и i1
без указания .loc
.Однако для меня использование .iloc
кажется более простым:
Вы можете получить индекс iloc
через pd.MultiIndex.get_locs
.
import pandas as pd
import numpy as np
index = pd.MultiIndex.from_arrays([list("aaabbb"),
list("abcabc")],
names=['i0', 'i1'])
df = pd.DataFrame({'x': [1, 2, 3, 4, 5, 6], 'y': [6, 5, 4, 3, 2, 1]}, index=index)
idx0 = index.get_locs(['b', slice(None)]) # i0 == 'b' => [3, 4, 5]
idx1 = index.get_locs([slice(None), 'b']) # i1 == 'b' => [1, 4]
idx = np.union1d(idx0, idx1)
print(df.iloc[idx])
даст
x y
i0 i1
a b 2 5
b a 4 3
b 5 2
c 6 1
Примечание: slice(None)
означает то же, что и [:]
в разрезании индекса.