У меня есть рамка данных 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]
Я бы хотел:
Итак, я нашел 40-й процентиль для каждой группы, используя:
df.groupby('Name').quantile(0.4)
Цель состоит в том, чтобы добраться до:
Моя основная проблема заключается в том, что значения для каждой группы не стандартизированы, поэтому я не могу применить общее значение процентиля для всего набора данных.
Но вся помощь, которую я видел относительно фильтрации фрейма данных с определенным значением, не делает его отдельно для каждой группы. Я видел следующие вопросы:
Pandas, groupby, где значение столбца больше x
Pandas Groupby применяет функцию для подсчета значений больше нуля
Мой вопрос в основном основывается на вариации следующего вопроса: Вычислить произвольную Percentile на Pandas GroupBy
Есть ли способ сделать это в Пандах?
Вы можете использовать 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
Используя ваш код для процентилей и 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