Если вам нужно получить строки, которые удовлетворяют этому условию, вы можете сделать это с помощью простой нарезки. Давайте пройдемся по нему:
- Чтобы получить квантильный порог 10%, используйте
df['Column'].quantile(0.1)
- Чтобы получить строки, в которых этот столбец ниже (или равен) этому порогу, используйте
df['Column'].le(df['Column'].quantile(0.1))
(или эквивалентно, df['Column'] <= df['Column'].quantile(0.1)
). - Предыдущее выражение дало серию с индексом, соответствующим индексу df, и значениями
True
/ False
, где значения совпадают / не совпадают условие. Такая серия может быть передана в качестве индекса в df для фильтрации только нужных строк.
Чтобы подвести итог, вы хотите получить следующее:
df_2 = df[df['Column'].le(df['Column'].quantile(0.1))]
РЕДАКТИРОВАНИЕ: для верхних 10% аналогично используйте
df_2 = df[df['Column'].ge(df['Column'].quantile(0.9))]
РЕДАКТИРОВАНИЕ (снова , согласно комментарию OP):
Если вам нужно получить точное число (например, ровно 10% вашего набора данных, независимо от дублирующихся значений), вы можете отсортировать кадр данных по соответствующему столбцу и выбрать верхнюю часть / bottom n значения (где n может быть, например, df.shape [0] // 10), например:
df_2 = df.sort_values('Column').tail(df.shape[0]//10) # top 10%
df_2 = df.sort_values('Column').head(df.shape[0]//10) # bottom 10%