Я хочу нарезать рамку данных Pandas в соответствии со значениями в нескольких сериях панд.
Поэтому мне нужны строки между значениями серии pandas.
Например:
df = pd.DataFrame(np.random.rand(10,5), columns = list('abcde'))
df_info = pd.DataFrame(data= {'beginRows': [2, 7], 'endRows': [4, 9]}
Мне нужны строки в df, которые находятся между значением beginRows и endRows, в каждой строке df_info.
Технически я могу сделать это как:
df_result = df[df.index.isin(np.r_[2:4+1,7:9+1])]
Я не уверен, как сделать этот список для отправки в качестве параметра np.r_ из фреймворка df_info.
Спасибо.
Вы можете передать объекты 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))]