Я пытаюсь разделить информационный кадр pandas на отдельные группы на основе значения столбца с заданным размером выборки.Пример приведенного ниже кадра данных:
Rating Result
1 25
2 24
5 20
5 21
6 18
7 20
Предположим, я хотел бы разбить указанный выше кадр данных на отдельные категории, чтобы каждая группа содержала 2 строки значений и была бы разделена на основе значения рейтинга.
Таким образом, первые 2 строки имеют 2 самых низких рейтинга, которые помещают их в их собственную группу.Рейтинг 5 и 5 находится во 2-й группе, а рейтинг 6 и 7 - в 3-й и последней группах.
Это позволило бы мне посмотреть, каков средний результат для разных групп рейтингов.
То, как я сейчас пытаюсь решить эту задачу, - через примитивный цикл, где яЯ жестко запрограммировал некоторые начальные значения, а затем я расширил диапазон параметров на определенную величину, пока не достигну желаемого размера выборки.Пример ниже:
df = pd.DataFrame(columns=['Rating','Result'],data=[[1,25], [2,24], [5,20], [5,21], [6,18], [7,20]])
initial_rating_threshold = [2,4,6]
targetted_sample_size = 2
paramter_change = 1
for loop_number,original_threshold in enumerate(initial_rating_threshold):
min_threshold = original_threshold-paramter_change*loop_number-2
max_threshold = original_threshold + paramter_change * loop_number
count = len(df.loc[(df['Rating'] >= min_threshold) & (df['Rating'] < max_threshold )])
if count >=targetted_sample_size:
break
# This filter provides the dataframe with minimum desired sample size
Приведенный выше код вроде как делает свою работу, однако я немного упростил его и заставил одновременно настраивать как значение параметра min, так и значение параметра max.
Есть ли способ выполнить приведенный выше код более эффективным способом?В идеале он может обрабатывать больше столбцов, чем 1, без какого-либо жесткого кодирования.