Pandas groupby, где значение столбца больше, чем x процентиль группы

1

У меня есть рамка данных pandas следующим образом:

df = pd.DataFrame()
df['Name'] = ['Abby', 'Abby', 'Abby', 'Abby', 'Abby', 'Daniel', 'Daniel', 'Daniel', 'Daniel', 'Daniel']
df['Marks'] = [100, 90, 76, 50, 10, 50, 45, 38, 25, 5]

Я бы хотел:

  1. Найти 40-й процентили для каждой группы
  2. Отфильтруйте фрейм данных таким образом, чтобы были показаны все значения выше 40-го процентиля для этой группы.

Итак, я нашел 40-й процентиль для каждой группы, используя:

df.groupby('Name').quantile(0.4)

Цель состоит в том, чтобы добраться до:

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

Моя основная проблема заключается в том, что значения для каждой группы не стандартизированы, поэтому я не могу применить общее значение процентиля для всего набора данных.

Но вся помощь, которую я видел относительно фильтрации фрейма данных с определенным значением, не делает его отдельно для каждой группы. Я видел следующие вопросы:

Pandas, groupby, где значение столбца больше x

Pandas Groupby применяет функцию для подсчета значений больше нуля

Мой вопрос в основном основывается на вариации следующего вопроса: Вычислить произвольную Percentile на Pandas GroupBy

Есть ли способ сделать это в Пандах?

Теги:
pandas
dataframe

2 ответа

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

Вы можете использовать transform

df[df.Marks>df.groupby('Name').Marks.transform('quantile',0.4)]
Out[712]: 
     Name  Marks
0    Abby    100
1    Abby     90
2    Abby     76
5  Daniel     50
6  Daniel     45
7  Daniel     38
  • 0
    возможно ли использовать этот подход для расширяющегося квантиля вместо квантиля полной выборки?
  • 1
    Я придумал то же решение, только на 4 минуты позже :)
Показать ещё 3 комментария
1

Используя ваш код для процентилей и loc, ge для >= (или gt, for >) и соответствия индексов:

df = df.set_index('Name')
df.loc[df.Marks.ge(df.groupby('Name').quantile(0.4).Marks)]

    Name    Marks
0   Abby    100
1   Abby    90
2   Abby    76
5   Daniel  50
6   Daniel  45
7   Daniel  38

Ещё вопросы

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