Разрезать ряды панд между двумя массивами

1

Я хочу нарезать рамку данных Pandas в соответствии со значениями в нескольких сериях панд.
Поэтому мне нужны строки между значениями серии pandas.
Например:

df = pd.DataFrame(np.random.rand(10,5), columns = list('abcde')) 

Изображение 174551

df_info = pd.DataFrame(data= {'beginRows': [2, 7], 'endRows': [4, 9]}

Изображение 174551

Мне нужны строки в df, которые находятся между значением beginRows и endRows, в каждой строке df_info.
Технически я могу сделать это как:

df_result = df[df.index.isin(np.r_[2:4+1,7:9+1])]

Изображение 174551

Я не уверен, как сделать этот список для отправки в качестве параметра np.r_ из фреймворка df_info.
Спасибо.

  • 0
    К вашему сведению - df_info - это большой массив данных, и было бы нереально выписать его вручную в параметры np.r_
Теги:
pandas
numpy

1 ответ

2
Лучший ответ

Вы можете передать объекты slice:

slice1 = slice(2, 4+1)
slice2 = slice(7, 9+1)

df_result = df[df.index.isin(np.r_[slice1, slice2])]

Учитывая ваш вход df_info:

s1, s2 = [slice(i, j+1) for i, j in df_info.values]

df_result = df[df.index.isin(np.r_[s1, s2])]

Или, для произвольного количества срезов, вы можете передать tuple в np.r_.__getitem__:

slices = tuple(slice(i, j+1) for i, j in df_info.values)

df_result = df[df.index.isin(np.r_.__getitem__(slices))]
  • 0
    Примечание: df_info может быть больше, чем 2 строки, поэтому просто составьте список. Благодарю.
  • 0
    @penguin, см. обновление для списка произвольных случаев.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню