Python pandas среза данных по нескольким диапазонам индексов

Что такое pythonic способ срезать фрейм данных с помощью большего числа диапазонов индексов (например, 10:12 и 25:28)? Я хочу это более элегантно:

df = pd.DataFrame({'a':range(10,100)})
df.iloc[[i for i in range(10,12)] + [i for i in range(25,28)]]

Результат:

     a
10  20
11  21
25  35
26  36
27  37

Что-то вроде этого было бы более элегантным:

df.iloc[(10:12, 25:28)]

Спасибо!

Ответ 1

Вы можете использовать numpy r_ "slice trick":

df = pd.DataFrame({'a':range(10,100)})
df.iloc[pd.np.r_[10:12, 25:28]]

дает:

     a
10  20
11  21
25  35
26  36
27  37

Ответ 2

Вы можете использовать функцию isin pandas.

df = pd.DataFrame({'a':range(10,100)})
ls = [i for i in range(10,12)] + [i for i in range(25,28)]
df[df.index.isin(ls)]


    a
10  20
11  21
25  35
26  36
27  37